Есть книга эксель — Акты . В книге Акты имеются 1 лист и 1 модуль (module1.bas). В модуле имеется функция GetStringA, возвращающая строковый результат (функция описана как As String). Функция имеет параметр (параметр описан как As Integer). На листе эта функция используется: в функцию подаются числа с 1 по 5. Так же функция используется в коде листа. Функция выдаёт результат. Всё казалось бы хорошо. Ранее копировал листы из текущей книги кодом VBA в новую книгу с помощью команды Sheets("4-й акт").Copy. После копирования работа книгой Акты прекращалась (книга закрывалась так же кодом VBA). Сейчас возникла необходимость после копирования листа в новую книгу, сохранить новую книгу и продолжить работу над книгой Акты.
Сейчас с помощью кода
| Код |
|---|
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule .DeleteLines 1, .CountOfLines End With |
я удаляю весь код в новой книге (код с модуля листа). Формулы превращаю в значения с помощью кода
| Код |
|---|
With ActiveWorkbook.Sheets("4-й акт")
.Cells.Copy
.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With |
Сохранение книги в формате .xlsb происходит с помощью кода
| Код |
|---|
ActiveWorkbook.SaveAs FileName:=stFile, FileFormat:=xlExcel12, CreateBackup:=False |
где stFile — путь к файлу (M:\Акты\П\4 Àïðåëü\À¹479.xlsb).
На этом этапе пока тоже всё хорошо.
А вот сразу после сохранения обращаюсь к переменной Err. Её значение становится равным 40040. А на листе в ячейках, в которых вызывалась функция GetStringA, появляется ошибка #ЗНАЧ!/
Кто из знающих подскажет: как правильно, с помощью кода VBA, копировать листы в новую книгу, при условии, что как на листе (формулами эксель), так и в коде VBA идёт использование функций, описанных в модуле (module1.bas). При этом, код, который есть в модуле листа, далее не нужен, так как будут только сами данные, а не вычисления (формулы будут заменены на значения). Так же не нужен модуль (module1.bas).