Макрос Excel останавливается на CSV-файле, открытом с помощью сочетания клавиш - PullRequest
0 голосов
/ 19 октября 2019

Я хочу открыть пару файлов .CSV и сохранить их как файл .XLSX, используя ярлык макроса. Когда я запускаю макрос ниже, сохраненный в PERSONAL.XLSB, используя View> Macro> Run all, работает отлично. Два файла .csv открываются и сохраняются как файлы .xlsx. Однако, если я использую для этого ярлык Macro, открывается первый файл, и все останавливается. Как я могу заставить остальную часть макроса продолжать выполнение без остановки при использовании сочетания клавиш при открытии первого файла?

.csv-файлы заменяются ежедневно, поэтому в них ничего не вставляется.

Sub SaveAsXLSX()

' SaveAsXLSX  Shortcut: Ctrl+Shift+W

    ChDir "T:\Temp"

    Workbooks.Open Filename:= _

        "T:\Temp\File1.csv"

    ActiveWorkbook.SaveAs Filename:= _

        "T:\Temp\File1.xlsx" _

        , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

    ActiveWorkbook.Close

    Workbooks.Open Filename:= _

        "T:\Temp\File2.csv"

    ActiveWorkbook.SaveAs Filename:= _

        "T:\Temp\File2.xlsx" _

        , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

    ActiveWorkbook.Close

End Sub

1 Ответ

0 голосов
/ 21 октября 2019

Проблема в том, что вы используете ActiveWorkbook, это книга, которая имеет фокус и находится сверху. Это может легко измениться при любом взаимодействии (например, пользовательский щелчок). Избегайте любых отчетов, которые включают Active любой ценой (если вы не знаете, что делаете и зачем вам это нужно). Лишь в очень редких случаях они вам нужны.

Вместо этого определите переменную для рабочей книги и задайте для оператора open эту переменную, чтобы использовать ее позже и избегать ActiveWorkbook

Sub SaveAsXLSX()
    ' SaveAsXLSX  Shortcut: Ctrl+Shift+W

    ChDir "T:\Temp"  '<-- this is not needed
    Dim Wb As Workbook

    Set Wb = Workbooks.Open(Filename:="T:\Temp\File1.csv")
    Wb.SaveAs Filename:="T:\Temp\File1.xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    Wb.Close

    Set Wb = Workbooks.Open(Filename:="T:\Temp\File2.csv")
    Wb.SaveAs Filename:="T:\Temp\File2.xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    Wb.Close
End Sub

Возможно, вам будет полезно прочитать Как избежать использования Select в Excel VBA , который объясняет эту технику более подробно.

...