Сохранение Excel Sheet с кодом, поскольку xlsm теряет код - PullRequest
0 голосов
/ 21 марта 2020

Я создаю листы динамически, что прекрасно работает. Один из созданных листов содержит VBA (Worksheet_Activate), который вставляется с использованием VBA, также отлично работает.

Теперь я пытаюсь сохранить созданный файл, в то время как l oop используется для принудительного сохранения I пробовал:

While Not workbookUsed.Saved


Dim filePath As String

filePath = Application.GetSaveAsFilename(fileFilter:="Excel File mit Makro (*.xlsm), *.xlsm")


    If VarType(filePath) = vbString Then

   workbookUsed.SaveAs _
            FileName:=filePath, _
            FileFormat:=52
  End If

Wend

End Sub

и я пытался использовать метод

Application.FileDialog(msoFileDialogSaveAs)

.

Оба работают и создают файл .xlsm, со всем сгенерированным содержимым в них, кроме для кода VBA, который находится на листах, он просто пустой, как обычный файл .xlsx.

Интересно, если вы остановите процедуру после сохранения файла и нажмете Ctrl + s, Excel обнаружит, что что-то изменилось, и сохранит вся книга.

Но если я закрою книгу после этого, используя

workbookUsed.Close

, я получу файл снова, без кода VBA, даже если я установлю его без сохранения при закрытии .

Так есть ли какой-то особый параметр, который нужно установить, чтобы сохранить всю книгу, включая содержимое vba?

1 Ответ

0 голосов
/ 23 марта 2020

Вы можете иметь код, который сохраняет файл в отдельной процедуре, например, SaveWorkbook, и использовать следующее в конце вашей основной процедуры:

Application.OnTime Now + TimeSerial(0, 0, 2), "SaveWorkbook"

Это запланирует процедуру, которая сохраняет файл для запуска 2 se c позже и даст Excel время для обработки изменений в VBproject, прежде чем его можно будет сохранить.

...