Я изо всех сил пытаюсь выяснить, как я могу перебирать все строки в excel от слова. Я хочу добиться того, что если в столбце WP в excel есть что-то, сохраните активный worddocument с этим именем файла. Однако я не могу найти что-то простое, как получить последнюю строку (может быть, пустые строки между ними), я просто получаю код ошибки 424, который, согласно MSDN, не дает мне никакого реального намека, что неправильно. Какие-нибудь идеи в чем-то не так?Как пройти через лист excel от слова
Public Sub test()
Dim xlapp As Object
Set xlapp = CreateObject("Excel.Application")
myFileName = "Z:\Dokumentstyring\UnderArbeid\PARTSLIST.xlsm"
xlapp.Workbooks.Open myFileName
xlapp.Application.ScreenUpdating = False
xlapp.Visible = False
a = xlapp.sheets("List").Range("A1").Value
b = firstBlankRow(xlapp)
c = getColumn("WP", xlapp)
xlapp.Application.ScreenUpdating = True
xlapp.ActiveWorkbook.Close (True)
xlapp.Quit
Set xlapp = Nothing
End Sub
Моя функция получить последнюю строку:
Function firstBlankRow(ByRef xlapp) As Long
'returns the row # of the row after the last used row
'Or the first row with no data in it
With xlapp.sheets("List")
'~~> Check if there is any data in the sheet
'If xlapp.WorksheetFunction.CountA(.Cells) <> 0 Then
firstBlankRow = .Range("A" & .Rows.Count).End(Excel.XlDirection.xlUp).Row
'Else
firstBlankRow = 1
'End If
End With
End Function
Вот моя функция для получения столбца номер
Public Function getColumn(header As String, ByRef xlapp) As Integer
Dim rng1 As Range
With xlapp.sheets("List")
Set rng1 = .Range(.Cells(1, 1), .Cells(1, Columns.Count)).Find(header, , xlValues, xlWhole)
If Not rng1 Is Nothing Then
getColumn = rng1.Column
Else
MsgBox "Column " & header & " does not exist, Typo??", vbCritical
getColumn = -1
End If
End With
End Function
Отлаживайте свой код шаг за шагом, используя F8. Это скажет вам, какая линия вызывает проблему. –
Спасибо @JLILI, с этим кодом я получаю ошибку 1004. Ой, жаль, что я забыл упомянуть, какая строка не удалась в исходном сообщении. Он не может найти значение xlup, если я установил его в 1, он пройдет, но вернет неправильный номер. Тогда это не сработает здесь: 'getColumn = rng1.Column' – skatun
Можете ли вы добавить' debug.print (rng1.Address (External: = False)) 'после' Set rng1 = .Range (.Cells (1, 1),. Ячейки (1, Columns.Count)). Найдите (header,, xlValues, xlWhole) 'и скажите, что он печатает? –