Импортировать строки кода
Можем ли мы читать скрипты или строки кода для модуля в vba ? Как и у нас есть функция include в php .
Например:
Мы сохраняем это в Excel где-то и называем диапазон как xyz
- Функции или подпрограммы Excel VBA в массиве
- Удаление элементов управления из пользовательской формы Excel с помощью VBIDE
- OLE Automation и взаимодействие с другой VBE / VBA IDE
- VBA - Автоматическая проверка / снятие отметки времени выполнения скрипта microsoft
- Excel не отвечает во время VBA Step-Through
line 1 of code line 2 of code line 3 of code
Затем во время запуска макроса мы называем это
Sub my_macro() xyz End Sub
В принципе, я хочу повторить несколько строк кода, но не хочу создавать другой макрос и передавать параметры.
Это можно сделать с помощью библиотеки Microsoft Visual Basic для расширения приложений 5.3 (VBIDE). На CPearson.com есть отличные примеры . Обычно я использую это, чтобы вставлять фрагменты кода во время разработки. Мне лично было бы неудобно выполнять код, хранящийся на листе excel, но я тестировал это, и он действительно работает.
Мой рабочий лист:
A 1 MsgBox "I'm a test." 2 MsgBox "So am I."
Я установил пустую подпрограмму, которую мы затем вставим в лист excel.
Private Sub ProcToModify() End Sub
И подпрограмма, которая фактически вставляет код в ProcToModify
:
Sub ModifyProcedure() Dim VBProj As VBIDE.VBProject Dim VBComp As VBIDE.VBComponent Dim CodeMod As VBIDE.CodeModule Dim StartLine As Long Dim NumLines As Long Dim ProcName As String Set VBProj = ActiveWorkbook.VBProject Set VBComp = VBProj.VBComponents("Module1") ' specify module to modify Set CodeMod = VBComp.CodeModule Dim ws As Worksheet Dim rng As Range Dim cell As Range Set ws = ThisWorkbook.ActiveSheet 'change this accordingly Set rng = ws.Range("A1:A2") 'and this For Each cell In rng ProcName = "ProcToModify" With CodeMod StartLine = .ProcStartLine(ProcName, vbext_pk_Proc) NumLines = .ProcCountLines(ProcName, vbext_pk_Proc) .InsertLines StartLine + NumLines - 2, cell.Value 'insert each line at the end of the procedure to get them in the correct order. End With Next cell End Sub
Вызывается во время выполнения следующим образом:
Public Sub main() ModifyProcedure ProcToModify End Sub
One Big Gotchya: перед запуском этого кода вам нужно перейти в Excel >> Файл >> Параметры >> Центр доверия >> Настройки центра доверия >> Параметры макроса и проверить «Доверять доступ к объектной модели проекта VBA».
Я бы предположил, что это связано с тем, что разрешение доступа к объекту проекта справедливо связано с угрозой безопасности.
С сайта cpearson.com я связался с ранее:
ПРЕДУПРЕЖДЕНИЕ. Многие компьютерные вирусы на базе VBA распространяются самостоятельно, создавая и / или изменяя код VBA. Поэтому многие антивирусные сканеры могут автоматически и без предупреждений или подтверждения удалять модули, которые ссылаются на объект VBProject, вызывая постоянную и безвозвратную потерю кода. Подробнее см. В документации по антивирусному программному обеспечению.