Фон:
Я пытаюсь и не могу сохранить и изменить файл с кодом в формате «без кода».Я экспериментировал, и я могу открыть файл, который уже существует из .xlsm, и он работает как положено.Сценарий продолжает выполняться, и я могу изменить и закрыть второй файл из сценария первого файла:
Sub testExistingWorkbook()
Dim wbkName As String
wbkName = "WorkWithWorkbookTest.xlsx"
Workbooks.Open (wbkName)
'~~>...code to modify goes here
Workbooks(wbkName).Close
End Sub
Однако, если я сохраню копию первого файла без макросов, а затем открою ипосле этого измените этот файл без макросов, файл с кодом закроется, когда откроется файл без кода.Хотя код выглядит так, как будто он пытается сделать то же самое, он работает , а не , как в первом примере.
Я перепробовал много разных конфигураций, но в каждом случае скрипт останавливается, когда я открываю следующий файл.Например, приведенный ниже пример кода останавливается после «Workbooks.Open (wbkName)».В этот момент он одновременно закрывает .xlsm, действие, которое мой код, по-видимому, не запрашивает (но я думаю, должно быть неявным в коде).Первоначально я закодировал его для создания объекта при его открытии: «Set wbk2 = Workbooks.Open (wbkName)», но обнаружил, что это не работает ни в одном из сценариев.Тогда я подумал, что, возможно, это была функция «Рабочих книг», представляющих собой коллекцию всех открытых рабочих книг, поэтому, если я открою файл, который еще не был открыт, он по сути выбьет другую книгу из коллекции (глупо, Я знаю).Но эта возможность устраняется приведенным выше примером кода.Какое-то время я думал, что это может быть потому, что имя было одинаковым и каким-то образом не различало .xlsx и .xlsm, но в приведенном ниже коде используется другое имя, что приводит к одной и той же проблеме, так что это не имеет значения.
Sub testSaveAsWorkbook()
Dim wbkName As String
wbkName = "SuperSecretWorbookTest.xlsx"
ThisWorkbook.SaveAs Filename:=wbkName, FileFormat:=61
Workbooks.Open (wbkName)
'~~>Code would go here, but the original file has closed and only
' the new SuperSecretWorkbookTest.xlsx is open
Workbooks(wbkName).Close
End Sub
Вопрос:
Подумав и написав этот вопрос, я понял, что проблема действительно начинается в тот момент, когда я выполняю 'ThisWorkbook.SaveAs Имя файла: = wbkName, FileFormat: = 61 'потому что тогда первая рабочая книга закрывается, а новая рабочая книга занимает ее место.IDE просто еще не знает об этом, поэтому даже пошагово просматривая код, он понимает, что файл .xlsm больше не активен, когда пытается выполнить следующую строку кода.
Так что мой вопрос - почемуWorkbooks.Save, как закрыть первый файл, как это?И что еще более важно, что я могу сделать, чтобы сохранить мой файл открытым и завершить сценарий?