带换行符的vba module.find(Ms access 2013)

时间:2015-11-01 01:34:54

标签: vba ms-access module ms-access-2013 vbe

我一直在使用一段代码在vba模块中查找特定文本。

适用于查找单行(或更少)文本。 因此,例如,它会在带有文本的模块中找到“mySub”:

Private sub mySub() 
  Dim a as Integer  
  Dim b as Integer  
End Sub

我正在使用的代码:

Set m = myAp.Modules(name)
m.find(text_find, 1, 1, -1, -1, False, False, False)

当我想搜索多行文本时,问题就开始了。 例如,我想找到文本部分:

  

将整数调整为整数
  Dim b as Integer

不幸的是,当我尝试展示我的多行搜索文本时,find函数返回false。

使用debug(watch / immediate)我确认我的搜索条件(text_find)在第一个'Integer'和'Dim b'之间包含chrs 13 + 10。

我还检查了“Dim a”行的module.Line值,并且还以chrs 13 + 10结束。

所以现在我真的很想知道如何让这个工作。

如果有人对此有任何帮助 - 将不胜感激。

由于

1 个答案:

答案 0 :(得分:2)

您无法使用Find方法搜索多行代码,但您可以将所有行读取为字符串,然后使用InStr查找每个匹配项搜索词:

Option Compare Database

Dim a As Integer
Dim b As Integer

Sub test()

  Const search As String = "Dim a As Integer" & vbCrLf & "Dim b As Integer"

  Dim md As Module
  Set md = Modules("Module1")

  Dim allLines As String
  allLines = md.Lines(1, md.CountOfLines)

  'Get the first instance of the search term...
  Dim pos As Long
  pos = InStr(1, allLines, search, vbTextCompare)

  Dim found As Boolean
  found = pos > 0

End Sub

但是,您应该注意,使用Find或InStr解析VBA几乎是不可能的。您需要状态机来可靠地执行它,或者您需要像ANTLR这样的库。

考虑一个包含以下内容的模块:

Dim a      As Integer 'some comment _
some comment
Dim b _
  As _
  Integer 'Some other comment

如何编写可以处理???的搜索词?

仅供参考 - Rubberduck VBA项目(我参与其中)一直在改进VBA语法,可以解析几乎所有的VBA语法。