Dim objExcel As New Excel.Application
Если это не вызывает проблем сейчас, это будет позже. Разделите объявление и присваивание, избегайте автоматически создаваемых объектов в целом, но еще больше особенно для объектов, которые порождают внешний процесс при создании.
Dim objExcel As Excel.Application
Set objExcel = New Excel.Application
... и не забудьте .Quit
тот случай, когда вы закончите:
'...
objExcel.Quit
Теперь ошибка 1004.
wb_xl.SaveAs FileName:="O:\documents\folder.csv", FileFormat:=xlCSV
Это кажется простым, и CSV создается
Неквалифицированная константа xlCSV
не является bigg ie, но имейте в виду, что она действительна только потому, что на библиотеку Excel
ссылаются; рассмотрите возможность его определения:
wb_xl.SaveAs FileName:="O:\documents\folder.csv", FileFormat:=Excel.xlCSV
Если создается CSV, то вызов SaveAs
сработал, и ошибочный оператор был бы следующим:
Set wb = objExcel.Workbooks.Open("O:\documents\folder.csv")
Вы не можете Open
этот файл, он уже открыт - вот почему оператор выдает ошибку 1004: если вы попробуете его в пользовательском интерфейсе Excel с файлом .xlsm, вы получите более подробное сообщение об ошибке:
Но сообщение об ошибке отличается от файла .csv:
Я получил это сообщение об ошибке, набрав это на ближайшей панели с открытой новой пустой книгой:
ThisWorkbook.SaveAs "C:\Dev\test123.csv", xlCSV
Set b = Workbooks.Open("C:\Dev\VBA\test123.csv")
Я думаю, что это именно та ошибка, которую вы получаете.
Удалите wb
, она вам не нужна ( примечание: если Open
успешно выполнено, присваивание приведет к ошибке несоответствие типов , поскольку вы не можете назначить объект Workbook
для ссылки Worksheet
; Dim wb As Excel.Worksheet
выглядит неправильно). Удалите операцию Workbooks.Open
, CSV уже открыт.
Другими словами:
Private Sub CommandButton1_Click()
Dim xlApp As Excel.Application
Set xlApp = New Excel.Application
Dim wb As Excel.Worksheet
Set wb = xlApp.Workbooks.Open("O:\documents\folder.xlsx")
wb.SaveAs FileName:="O:\documents\folder.csv", FileFormat:=Excel.xlCSV
wb.Close savechanges:=False
xlApp.Quit
End Sub