Конвертировать книгу Excel в CSV в VBA - PullRequest
1 голос
/ 15 февраля 2020

Я получаю сообщение об ошибке в своем скрипте VBA для преобразования рабочей книги Excel в CSV. Скрипт VBA запускается через скрипт Microsoft Word VBA.

Private Sub CommandButton1_Click()

Dim objExcel As New Excel.Application
Dim wb_xl As Excel.Workbook
Dim wb As Excel.Worksheet

Set wb_xl = objExcel.Workbooks.Open("O:\documents\folder.xlsx")
wb_xl.SaveAs FileName:="O:\documents\folder.csv", FileFormat:=xlCSV
Set wb = objExcel.Workbooks.Open("O:\documents\folder.csv")
wb_xl.Close savechanges:=False

End Sub

Это кажется простым, и создается CSV, но я получаю сообщение об ошибке:

Ошибка времени выполнения «1004»: невозможно получить доступ к папке. csv '

Ошибка в строке 8 (wb_xl.SaveAs...).

1 Ответ

4 голосов
/ 15 февраля 2020
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, вы получите более подробное сообщение об ошибке:

Sorry, Excel can't open two workbooks with the same name at the same time

Но сообщение об ошибке отличается от файла .csv:

Run-time error 1004: Sorry, we couldn't find C:\Dev\test123.csv. Is it possible it was moved, renamed or deleted?

Я получил это сообщение об ошибке, набрав это на ближайшей панели с открытой новой пустой книгой:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...