我正在尝试搜索当前VBProject
的过程名称实例。为此,我使用了CodeModule.Find
方法(详情here),其中要求:
string
变量)long
变量)long
变量)和出于某种原因,每次调用此方法时,它都会将st_line
和en_line
变量的值更改为不同的数字。在我提供的简单示例中,似乎我不需要多次使用这些数字,但在我的应用程序中我做了,并且方法不断更改它们!
代码:
Sub Find_Method_Changes_Var_Values()
Dim st_line As Long, en_line As Long
Dim search_String As String
Dim VBC As VBIDE.VBComponent
search_String = "Sub"
st_line = 5
en_line = 100
Set VBC = ThisWorkbook.VBProject.VBComponents("ThisWorkbook")
***If VBC.CodeModule.Find(search_String, st_line, 1, en_line, 500) = True Then
MsgBox "Found our target."
End If
End Sub
一旦运行前面有三个星号的行(无论它是否实际找到我们正在搜索的字符串),st_line
和en_line
的值都会更改为{ {1}}。
该方法的作用是将20
和st_line
变量更改为方法找到搜索词的第一个实例的行。
我如何使用此方法并保留我的变量值?
答案 0 :(得分:2)
来自本主题的文档:
startline必填。 A Long指定要开始搜索的行;如果找到一个,将被设置为匹配的行。第一行是第1行。
看起来VBC.CodeModule.Find正在改变起始线。它同样影响终结点:
结束必需。一个Long指定匹配的最后一行(如果找到一个)。最后一行可以指定为1。
您必须使用另一对设置为相同值的变量,因此请更改:
st_line = 5
en_line = 100
Set VBC = ThisWorkbook.VBProject.VBComponents("ThisWorkbook")
***If VBC.CodeModule.Find(search_String, st_line, 1, en_line, 500) = True Then
MsgBox "Found our target."
End If
到
st_line = 5
en_line = 100
' temporary variables
temp_st_line = st_line
temp_en_line = en_line
Set VBC = ThisWorkbook.VBProject.VBComponents("ThisWorkbook")
***If VBC.CodeModule.Find(search_String, temp_st_line, 1, temp_en_line, 500) = True Then
MsgBox "Found our target."
End If
来源:https://msdn.microsoft.com/en-us/library/aa443952(v=vs.60).aspx