Я пытаюсь перебрать файл .csv, открытый через FileDialog.Код выбрасывает
во время выполнения '1004' ошибка
в строке:
Set searchInColumn = ActiveSheet.Cells(i, j).Offset(, -1).EntireColumn
В этом процессе данные из заполненныхстолбцы помещаются в ячейки первого столбца, разделенные точкой с запятой.
Моя идея - запустить код в файлах .csv и .xlsx.Код сокращен.Какой бы код ни находился ниже проблемной строки, весь Sub работает на .xlsx, но застревает на .csv.Это также идет хорошо, когда я избавляюсь от всего, что связано с FileDialog, помещаю код в файл .xlsb, вставляю туда данные (из .csv) и запускаю макрос из списка alt + f8.
Я исчерпалидей для решения этой проблемы, не могли бы вы дать мне подсказку?
Sub FixCSV()
Dim findMatch As Range, searchInColumn As Range
Dim i As Long, j As Long, k As Long, lastRow As Long, lastColumn As Long
Dim chosenFile As Integer
Dim chooseFiles As Office.FileDialog
Application.ScreenUpdating = False
Set chooseFiles = Application.FileDialog(msoFileDialogFilePicker)
With chooseFiles
.AllowMultiSelect = True
.Title = "Please select the file."
.InitialFileName = "c:\"
.InitialView = msoFileDialogViewList
End With
chosenFile = chooseFiles.Show
If chosenFile = -1 Then
For k = 1 To chooseFiles.SelectedItems.Count
Workbooks.Open chooseFiles.SelectedItems(k)
lastColumn = ActiveSheet.Cells(1, ActiveSheet.Columns.Count).End(xlToLeft).Column
j = 2
Do Until j = lastColumn
Set searchInColumn = ActiveSheet.Cells(1, j).Offset(, -1).EntireColumn
Set findMatch = searchInColumn.Find(What:=ActiveSheet.Cells(1, j).Value)
If ActiveSheet.Cells(1, lastColumn).Offset(0, 1).Value = "" Then
j = j + 1
End If
Loop
Next k
End Sub