我试图重用我的代码模块来运行循环(这会在不同的循环中改变一些数据);然而,我意识到从第二个循环开始,宏仍然在运行旧的脚本。你知道如何确保宏运行更新后的脚本(每次循环时我都会删除并重新创建脚本)吗?
实际的脚本很长,为了简化它,我只提取我引用的区域。我运行这个没有错误,只是从第二个循环开始,我检查了我重新创建的模块有更新的脚本,但宏仍然运行第一个循环脚本,这对我来说非常奇怪。
要写入模块的脚本存储在excel sheet3中,并在每次新循环开始后更改
Sub write_module()
For i = 1 To 2
Dim VBProj As VBIDE.VBProject
Dim VBComp, comp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Set VBProj = ActiveWorkbook.VBProject
Set VBComp = VBProj.VBComponents("ZC553_MS")
Set CodeMod = VBComp.CodeModule
script_lr = Sheet3.Cells(Rows.Count, 8).End(xlUp).Row
LineNum = 2
With ActiveWorkbook.VBProject.VBComponents("ZC553_MS").CodeModule
' .DeleteLines 2, VBComp.CodeModule.CountOfLines - 2
For j = 1 To script_lr
.InsertLines LineNum, Sheet3.Cells(j, 8)
LineNum = LineNum + 1
Next j
End With
zc553_master
Next i
End Sub
发布于 2018-07-26 14:16:09
尝试使用
Application.Run "zc553_master"
代替
zc553_master
用于调用动态编写的过程
这对我来说很好用:
Sub Tester()
Dim i As Long, cm As CodeModule
For i = 1 To 5
Set cm = ActiveWorkbook.VBProject.VBComponents("ZC553_MS").CodeModule
With cm
.DeleteLines 2, 3
.InsertLines 2, "Sub zc553_master()"
.InsertLines 3, " Debug.Print ""Version " & i & """"
.InsertLines 4, "End Sub"
End With
DoEvents
Debug.Print "calling", i
Application.Run "zc553_master"
'zc553_master
Next i
End Sub
输出:
calling 1
Version 1
calling 2
Version 2
calling 3
Version 3
calling 4
Version 4
calling 5
Version 5
使用直接调用zc553_master
的...but只是崩溃崩溃,或者似乎什么都没有运行。
但是,您尝试使用此方法解决的实际问题是什么?很难想象使用静态过程和传递参数不能模仿的东西。
发布于 2018-07-27 09:16:01
我需要清除代码模块的全部内容,包括Sub ()和End Sub,以便vba在第一次循环运行后识别代码模块中更新的代码。Tim提供了一个很好的示例和正确的实践,当您需要重用相同的代码模块名称,但在每次循环运行后更改内容时,所有功劳都归功于他:)
https://stackoverflow.com/questions/51530915
复制相似问题