您无法中断编译项目后生成的代码,因此您需要确保使用有效的可编译代码构建该动态模块。
你知道在按下 F5 按钮之前你的代码将如下所示:
Sub MyNewProcedure()
n = 0 : e_i_e = 0 : For e_i_e = 0 To 100 : n+=1 : Next
End Sub
为什么不直接将该片段粘贴到某处,看看 VBE 抱怨什么?
哇。看,这就是为什么在同一行代码上塞满六条指令是一个坏主意——如果每行只有一条指令,您就不会想知道哪一条指令被破坏了。
正如已经提到的, n += 1
不是 VBA 语法(也不是特定的 C# 语法);在VBA中增加一个值需要访问当前值,所以n = n + 1
.
不清楚在哪里n
and e_i_e
都来自.如果两人都是当地人,那么您的程序基本上不会完成任何任务。如果n
被声明为外部MyNewProcedure
,那么你应该考虑将其作为ByRef
参数,或者更好,完全忽略它并制作一个Function
调用代码分配的结果n
to.
Sub MyNewProcedure(ByRef n As Long)
Dim i As Long
For i = 0 To 100
n = i
Next
End Sub
归结为:
Function MyNewFunction() As Long
MyNewFunction = 100
End Function
这让我想知道你到底想实现什么目标。
如果生成的代码中存在错误,则必须在字符串中对其进行调试,因为 VBE 的调试器不会让您在生成的代码上中断 - 这意味着以可读且易于理解的方式生成代码至关重要。可维护的方式。目前,您的代码中没有任何地方可以在清晰的字符串中包含实际的完整生成代码 - 它是在InsertLines
call.
考虑:
Dim code As String
code = "'Option Explicit" & vbNewLine & _
"Public Sub MyNewProcedure()" & vbNewLine & _
" n = 0" & vbNewLine & _
" e_i_e = 0" & vbNewLine & _
" For e_i_e = 0 To 100" & vbNewLine & _
" n = n + 1 ' fixed from n += 1" & vbNewLine & _
" Next" & vbNewLine & _
"End Sub" & vbNewLine
'...
'Debug.Print code
.InsertLines LineNum, code
在调试时更容易获取完整的代码,并且也更容易检查和修复。请注意,您可以链接的行延续数量是有限的。