У меня есть программа, которая должна копировать некоторые значения из других рабочих книг, и изначально я настроил ее на получение значений от конкретной продажи.
Пока я пытаюсь реализовать функцию поиска, чтобы не вводить номер столбца вручную.
Я пытаюсь использовать следующие функции
Col = wb.Worksheets("Calculation").Rows(2).Find("31.12.2018").Column
Но хотя в файле есть определенное значение 31.12.2018, оно все равно не работает должным образом.
Кроме того, это как-то работало, пока я что-то не изменил и пока не могу найти ошибку. Также существует проблема: если скрипт не находит данные, он переходит к ошибке неопределимого объекта (кажется, что вы не можете назначить .column, когда информация не найдена).
strFilter = "Excel Files (*.xls;*.xlsb;*.xlsx),*.xls;*xlsb;*.xlsx"
strTitle = "Select input file (XXXX)"
arrfiles = Application.GetOpenFilename(strFilter, 2, strTitle, , True)
If VarType(arrfiles) = vbBoolean Then Exit Sub
Dim out As String
out = Cells(2, 7)
brow = Cells(2, 8)
bcol = Cells(2, 9)
Dim Target As Range
Dim Source As Range
Dim Col As Integer
For b = 1 To UBound(arrfiles)
Set wb = Workbooks.Open(Filename:=arrfiles(b), UpdateLinks:=False)
lLastRow = wb.Worksheets("Calculation").Cells(Rows.Count, 3).End(xlUp).Row
ThisWorkbook.Worksheets(out).Cells(brow, 1) = wb.Worksheets("Template").Cells(3, 3)
ThisWorkbook.Worksheets(out).Cells(brow, 2) = wb.Worksheets("Template").Cells(2, 3)
lLastRow = wb.Worksheets("Calculation").Cells(Rows.Count, 3).End(xlUp).Row
lLastRowCol = ThisWorkbook.Worksheets("Build").Cells(Rows.Count,1).End(xlUp).Row
For k = 2 To lLastRowCol
ThisWorkbook.Worksheets(out).Cells(brow, 1) = wb.Worksheets("Template").Cells(3, 3)
ThisWorkbook.Worksheets(out).Cells(brow, 2) = wb.Worksheets("Template").Cells(2, 3)
Col = wb.Worksheets("Calculation").Rows(2).Find("31.12.2018").Column
ThisWorkbook.Worksheets(out).Cells(brow, 3) = wb.Worksheets("Calculation").Cells(2, Col)
Set Target =ThisWorkbook.Worksheets(out).Range(ThisWorkbook.Worksheets(out).Cells(brow, 4),
ThisWorkbook.Worksheets(out).Cells(brow, 4 + lLastRow - 4))
Set Source = wb.Worksheets("Calculation").Range(wb.Worksheets("Calculation").Cells(4, Col), wb.Worksheets("Calculation").Cells(lLastRow, Col))
Source.Copy
Target.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
brow = brow + 1
Next k
Объект undefined является наиболее распространенной ошибкой, а также не работает файловая строка для не найденных значений (не представлена в коде выше)