Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Ошибка при копировании листов в другую книгу (VBA)
 
Ошибка:
Run-time error '-2147417848 (80010108)':
Method 'Copy1 of object 'Sheets' failed
Ошибка при копировании листов в другую книгу (VBA)
 

Добрый день! Подскажите пожалуйста в чем проблема и как это поправить. У меня с некоторого времени перестала работать строка ThisWorkbook.Sheets(Array(2, 3, 4, 5)).Copy во всех файлах, которые ее содержат, во всех офисах (2016, 365) и на всех компьютерах (в офисе и дома). До этого в течение пяти лет все нормально работало вот в таком макросе:

Код
Sub CopyList()
Dim CellValue As String
Dim FinalFileName As String
Dim arSheets%(), a%
ReDim arSheets(Sheets.Count - 1)
For a = 1 To Sheets.Count - 1
    arSheets(a) = a
Next
Application.ScreenUpdating = False
ThisWorkbook.Sheets(Array(2, 3, 4, 6)).Copy
Application.DisplayAlerts = False
FinalFileName = ThisWorkbook.Path & "\" & CreateObject("Scripting.FileSystemObject").GetBaseName(ThisWorkbook.Name)
ActiveWorkbook.SaveAs Filename:=FinalFileName, FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close SaveChanges:=False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "The file is saved in the folder """ & ThisWorkbook.Path & """", vbInformation, "Saving file"
End Sub
Изменено: Perec - 26.06.2025 10:25:28
Запуск макроса по факту пересчёта формулы в конкретной ячейке
 
Спасибо всем!
Эти способы я уже пробовал. Я тут неожиданно понял, что моя проблема совсем в другом. Буду разбираться.
Запуск макроса по факту пересчёта формулы в конкретной ячейке
 
Добрый день всем! Перечитал кучу информации, но так и не нашел простого ответа на простой вопрос. Как запустить макрос по факту пересчёта формулы в конкретной ячейке. Например, как по факту изменения ячейки вручную (см. Код). Подскажите пожалуйста.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$F$1" Then
     Call Prohlaseni
    End If
End Sub
Изменено: Perec - 17.12.2021 11:39:14
Вычисления внутри макроса по формуле и присвоение результата переменной
 
Код
Function Prohlaseni(Vyrobce As Variant, Reference As Variant) As Variant
 Select Case Vyrobce
  Case "GOI"
   Prohlaseni = WorksheetFunction.VLookup(Reference, Workbooks("D:\BAZA.xlsx").Worksheets("DPG").Range("$D$5:$G$1000"), 4, 0)
  Case "FINKLEY"
   Prohlaseni = WorksheetFunction.VLookup(Reference, Workbooks("D:\BAZA.xlsx").Worksheets("DPF").Range("$D$5:$G$1000"), 4, 0)
  Case "STEEL"
   Prohlaseni = WorksheetFunction.VLookup(Reference, Workbooks("D:\BAZA.xlsx").Worksheets("DPS").Range("$D$5:$G$1000"), 4, 0)
   Case "TESLA"
   Prohlaseni = WorksheetFunction.VLookup(Reference, Workbooks("D:\BAZA.xlsx").Worksheets("DPT").Range("$D$5:$G$1000"), 4, 0)
  Case "CRAVT"
   Prohlaseni = WorksheetFunction.VLookup(Reference, Workbooks("D:\BAZA.xlsx").Worksheets("DPC").Range("$D$5:$G$1000"), 4, 0)
  End Select
End Function
Спасибо компилятор успокоился, но VLookup ищет только в открытом файле BAZA.xlsx. При закрытом файле выдает ошибку.
Т.е ищет если Workbooks("BAZA.xlsx") и файл открыт, выдает ошибку, если Workbooks("D:\BAZA.xlsx") и файл закрыт.
А нужно, чтобы работало с закрытым файлом BAZA. Подскажите, пожалуйста, что нужно исправить, чтобы работало с закрытым файлом.
Изменено: Perec - 13.12.2021 15:48:29
Вычисления внутри макроса по формуле и присвоение результата переменной
 
Кавычки я конечно же тоже пробовал, но тогда компилятору начинает не нравиться восклицательный знак.
Вычисления внутри макроса по формуле и присвоение результата переменной
 
Добрый день всем!
Хочу продолжить тему. У меня такая-же задача. Нужно присвоить переменной результат поиска функцией ВПР в закрытом файле. Пишу пользовательскую функцию, которая в зависимости от значения переменной Vyrobce ищет Prohlaseni для Reference на одном из листов базы данных BAZA. И, пока что уперся в проблему, что VBA выдает ошибку компиляции. Ругается на на  апостроф  'D:. Я не понимаю в чем проблема. Помогите , пожалуйста.
Код
Function Prohlaseni(Vyrobce As Variant, Reference As Variant) As Variant                
 Select Case Vyrobce
  Case GOI
   Prohlaseni = WorksheetFunction.VlookUp(Reference,'D:\[BAZA.xlsx]DPG'!$D$5:$G$1000,4,0)
  Case FINKLEY
   Prohlaseni = WorksheetFunction.VlookUp(Reference,'D:\[BAZA.xlsx]DPF'!$D$5:$G$1000,4,0)
  Case STEEL
   Prohlaseni = WorksheetFunction.VlookUp(Reference,'D:\[BAZA.xlsx]DPS'!$D$5:$G$1000,4,0)
  Case TESLA
   Prohlaseni = WorksheetFunction.VlookUp(Reference,'D:\[BAZA.xlsx]DPT'!$D$5:$G$1000,4,0)
  Case CRAVT
   Prohlaseni = WorksheetFunction.VlookUp(Reference,'D:\[BAZA.xlsx]DPC'!$D$5:$G$1000,4,0)
 End Select
End Function
Изменено: Perec - 13.12.2021 14:21:19
Пропись в PLEX
 
Здравствуйте!
У меня вопрос по функции PropisEng.
Сумма 371 439,29  пишется как "Three Hundred And Seventy One Thousand Four Hundred And Thirty Nine Euro And Twenty Nine Eurocents ". Но так в английском языке не принято писать. А как сделать, чтобы And был только один раз - перед копейками  "Three Hundred Seventy One Thousand Four Hundred Thirty Nine Euro And Twenty Nine Eurocents ".
Благодарю за помощь.
Run-time error '91' при копировании столбцов внутри книги
 
Огромное спасибо за помощь! Теперь все работает нормально.
Run-time error '91' при копировании столбцов внутри книги
 
Ну почему же  "угадайте"? Я же говорю, что макрос рабочий. Запускается с кнопки на листе "PL" и успешно справляется с поставленной задачей. Но, потом, по неизвестной причине, которую мне не удалось выяснить или заметить какую-то закономерность, перестает работать и выдает ошибку "Run-time error '91'. При этом жалуется на строки, в которых производится копирование. А может и наоборот при открытии файла сначала не работает, а потом, опять же по неизвестной причине, начинает работать нормально.  Т.е. работает, но работает не стабильно в отличие от второго макроса, который использует тот же метод копирования столбцов, но в другую книгу. Мне кажется, что проблема в коде первого макроса. Извините. но прислать файл не могу - "секрет фирмы", но попробую сделать и прислать упрощенный вариант.
А вот и файл  
Изменено: Perec - 29.12.2020 15:55:39
Run-time error '91' при копировании столбцов внутри книги
 
Добрый день.
Есть код, который копирует столбцы с одного листа на другой внутри одной книги.
Код
Sub Kamion1()
Application.ScreenUpdating = False
  Sheets("PL").AutoFilter.Range.Columns("A").Offset(1).SpecialCells(12).Copy
  Sheets("Kamion 1").Range("C107").PasteSpecial xlPasteValues
  Sheets("PL").AutoFilter.Range.Columns("C").Offset(1).SpecialCells(12).Copy
  Sheets("Kamion 1").Range("E107").PasteSpecial xlPasteValues
  Sheets("PL").AutoFilter.Range.Columns("D").Offset(1).SpecialCells(12).Copy
  Sheets("Kamion 1").Range("F107").PasteSpecial xlPasteValues
Application.ScreenUpdating = True
Sheets("Kamion 1").Select
Cells(107, 1).Select
End Sub
При запуске макроса, он ведет себя непредсказуемо. Иногда все нормально работает, а иногда выдает ошибку "Run-time error '91' Object variable or With block variable not set". Какой-либо закономерности в появлении ошибки я не нашел.
При этом есть другой код, который так же копирует столбцы, но из одной книги в другую. Этот макрос всегда работает хорошо и не выдает ошибок.
Код
Sub Vyvoz_CUBIC_1()
Dim iLastRow As Long
Dim FileName As String
Dim ProjektName As String
ProjektName = Left$(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, ".") - 1)
FileName = Workbooks(ProjektName).Sheets("Country").Range("M3")
Workbooks("Proforma invoice_Packing list " & FileName).Sheets("Proforma invoice " & FileName).Activate
iLastRow = Cells(Rows.Count, 3).End(xlUp).Row + 1

Application.ScreenUpdating = False
   Workbooks(ProjektName).Sheets("CUBIC").AutoFilter.Range.Columns("B").Offset(2).SpecialCells(12).Copy
  Workbooks("Proforma invoice_Packing list " & FileName).Sheets("Proforma invoice " & FileName).Cells(iLastRow, "C").PasteSpecial xlPasteValues
   Workbooks(ProjektName).Sheets("CUBIC").AutoFilter.Range.Columns("C").Offset(2).SpecialCells(12).Copy
  Workbooks("Proforma invoice_Packing list " & FileName).Sheets("Proforma invoice " & FileName).Cells(iLastRow, "D").PasteSpecial xlPasteValues
   Workbooks(ProjektName).Sheets("CUBIC").AutoFilter.Range.Columns("D").Offset(2).SpecialCells(12).Copy
  Workbooks("Proforma invoice_Packing list " & FileName).Sheets("Proforma invoice " & FileName).Cells(iLastRow, "E").PasteSpecial xlPasteValues
Application.ScreenUpdating = True
Range("A33").Select
End Sub
Подскажите, пожалуйста, почему в первом макросе появляется ошибка, если используется тот же метод копирования, что и во втором макросе, в котором ошибки не появляются?
Заранее благодарю всех за помощь!
Изменено: Perec - 29.12.2020 11:32:01
В тексте №_ящика-количество. Суммировать количество в каждом ящике
 
БМВ, большое спасибо за участие!
Код Hugo на 100% решил задачу.
В тексте №_ящика-количество. Суммировать количество в каждом ящике
 
Большое спасибо, Hugo !!!
Все отлично работает. Я даже не понял про "мелочевку".
В тексте №_ящика-количество. Суммировать количество в каждом ящике
 
Вот не поленился сделал руками для всех позиций, чтобы присутствовали все возможные варианты.
Lari,  большое спасибо, но помощью Power Query я знаю как сделать.
А нужно сделать, чтобы выглядело как в последнем примере в соседнем столбце (еще лучше в этом же).
В тексте №_ящика-количество. Суммировать количество в каждом ящике
 
Вот реальный файл  
В тексте №_ящика-количество. Суммировать количество в каждом ящике
 
Добрый день, Lari!
Уточняю вопрос.
Есть содержимое ячейки:
100-4шт, 100-28шт, 100-28шт, 100-28шт, 100-28шт, 120-28шт, 120-28шт, 120-28шт, 120-16шт
Нужно сложить количество штук в каждом ящике (в ящике 100 и 120) и представить в следующем виде:
100-116шт, 120-100шт
в этой же или соседней ячейке.
В тексте №_ящика-количество. Суммировать количество в каждом ящике
 
Добрый день всем!
У меня с одной стороны простой вопрос, а с другой... Я не знаю как сделать.

Нужно содержимое ячейки
100-4ks, 100-28ks, 100-28ks, 100-28ks, 100-28ks, 120-28ks, 120-28ks, 120-28ks, 120-16ks
преобразовать  в
100-116ks, 120-100ks

Прошу помощи. Сам никак не могу сообразить ка сделать
Страницы: 1
Наверх