Можно ли как то прописать код, чтобы макрос после создание новой книги с нескольким листами, заходил в код каждого листа и вписывал туда одну и ту же команду для выполнения на этих листах?
Подключите библиотеку: Microsoft Visual Basic for Applications Extensibility 5.3
Её можно не отключать, т.к. она встроена в виндоус.
Если в модуль листа надо вставить много кода, то тогда вставляйте код из текстового файла.
Иначе в коде макроса будет неудобно писать много кода.
Или можно в том проекте, где находится запускающийся макрос, сделать специально модуль, в этот модуль написать макрос и затем брать код из этого модуля.
Макрос
Sub макрос()
Dim bk_new As Workbook, VBProject As VBIDE.VBProject
Dim VBComponent As VBIDE.VBComponent
' Создание книги и присвоение ей имени 'bk_new'.
' Далее в коде можно будет обращаться к книге по этому имени.
Set bk_new = Workbooks.Add
' Присваиваем vba-проекту имя 'VBProject'.
Set VBProject = bk_new.VBProject
' Движение по всем модулям vba-проекта.
For Each VBComponent In VBProject.VBComponents
' Если имя vba-проекта начинается со слова 'Лист'.
If VBComponent.Name Like "Лист*" Then
' Запись кода в модуль листа, начиная с первой строки.
VBComponent.CodeModule.InsertLines Line:=1, String:="Sub Макрос()" & vbCr & "End Sub"
End If
Next VBComponent
End Sub
Второй вариант мне вроде больше подходит.
Можно прописать эти команды в модуль макроса, который я запускаю? Я так понимаю это должно быть где-то перед показом пользовательской формы.
Макрос
Sub Макрос1()
'перенос выбраных листов в новую книгу
Dim TempW As Window
Set CurW = ActiveWindow
Set TempW = ActiveWorkbook.NewWindow
CurW.SelectedSheets.Copy
TempW.Close
'показ формы для ввода данных
UserForm1.TextBox3.Value = CreateObject("WScript.Shell").specialfolders("Desktop")
UserForm1.Show
'сохранение новой книги
ActiveWorkbook.SaveAs Filename:=UserForm1.TextBox3.Value & "\#LOG" & UserForm1.TextBox1.Value & "MС" & UserForm1.TextBox2 & ".xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
'закрытие исходной книги
Workbooks("BOO2 — копия.xlsm").Close SaveChanges:=False
End Sub
Макрос
Sub Макрос1()
'перенос выбраных листов в новую книгу
Dim TempW As Window
Set CurW = ActiveWindow
Set TempW = ActiveWorkbook.NewWindow
CurW.SelectedSheets.Copy
TempW.Close
'показ формы для ввода данных
UserForm1.TextBox3.Value = CreateObject("WScript.Shell").specialfolders("Desktop")
UserForm1.Show
'сохранение новой книги
ActiveWorkbook.SaveAs filename:=UserForm1.TextBox3.Value & "\#LOG" & UserForm1.TextBox1.Value & "MС" & UserForm1.TextBox2 & ".xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
' Присваиваем новой книге имя 'bk_new'. Далее в коде можно будет обращаться к книге по этому имени.
Set bk_new = ActiveWorkbook
'закрытие исходной книги
Workbooks("BOO2 — копия.xlsm").Close SaveChanges:=False
' Запись кода в модули листов новой книги.
WriteMacrosToNewFile bk_new
End Sub
Private Sub WriteMacrosToNewFile(bk_new As Workbook)
Dim VBProject As VBIDE.VBProject, VBComponent As VBIDE.VBComponent
' Присваиваем vba-проекту имя 'VBProject'.
Set VBProject = bk_new.VBProject
' Движение по всем модулям vba-проекта.
For Each VBComponent In VBProject.VBComponents
' Если имя vba-проекта начинается со слова 'Лист'.
If VBComponent.Name Like "Лист*" Then
' Запись кода в модуль листа, начиная с первой строки.
VBComponent.CodeModule.InsertLines Line:=1, String:="Sub Макрос()" & vbCr & "End Sub"
End If
Next VBComponent
End Sub