CodeModule.Find方法更改变量的值(Find Method VBA Add-In Object Model)

时间:2017-08-16 18:50:40

标签: vba excel-vba variables vbe excel

我正在尝试搜索当前VBProject的过程名称实例。为此,我使用了CodeModule.Find方法(详情here),其中要求:

  • 搜索字词(我提供string变量)
  • 起始行(我提供long变量)
  • 开始栏(我使用第1栏)
  • 结束行(我提供long变量)和
  • 结束列(我使用第500列)。

出于某种原因,每次调用此方法时,它都会将st_lineen_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_lineen_line的值都会更改为{ {1}}。

该方法的作用是将20st_line变量更改为方法找到搜索词的第一个实例的行。

我如何使用此方法并保留我的变量值?

1 个答案:

答案 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