使用ProcBodyLine从程序中获取第一个实线

时间:2014-11-12 11:15:07

标签: vba

我正在使用ProcBodyLine获取过程的第一行,以便在某些过程中在运行时动态插入代码。我使用的代码与我写的in this question

相同

我遇到的问题是使用“_”分隔符在多行中定义的过程:

这是更改前的程序: Before

这是插入代码后的结果: After

documentation对ProcBodyLine非常清楚:过程的第一行是Sub,Function或Property语句出现的行。但它没有说明任何内容如何获得声明结束的地方。

当定义仅使用1行时,根本没有问题。有一种方法可以知道真正的第一个代码行(不是定义)并获得以下结果吗?

Wanted

1 个答案:

答案 0 :(得分:0)

VBA不允许在连续符号之后使用内联注释,并且行连续符号必须在其前面有空格,因此如果ProcBodyLine行以空格和_结尾,则它是一个连续行。即使过程在单行上有一个以注释和连续符号结尾的签名也是如此,因为在这种情况下它将是注释的继续。

'I don't know why declaring CodeModule as VBIDE.CodeModule causes a type mismatch
Public Function GetFirstLineAfterSignature(ByVal CodeModule As Object, ByVal ProcName As String, ByVal ProcKind As VBIDE.vbext_ProcKind) As Long
  GetFirstLineAfterSignature = CodeModule.ProcBodyLine(ProcName, ProcKind)

  Do While Right$(CodeModule.Lines(GetFirstLineAfterSignature, 1), 2) = " _"
    GetFirstLineAfterSignature = GetFirstLineAfterSignature + 1
  Loop

  GetFirstLineAfterSignature = GetFirstLineAfterSignature + 1
End Function