下面是我的代码:
For Each pj In wdApp.Application.VBE.VBProjects
x = pj.FileName
y = pj.Protection
If x <> "" Then
If y <> "1" Then
For Each vbcomp In pj.VBComponents
For i = 1 To vbcomp.CodeModule.CountOfLines
newMacro = vbcomp.CodeModule.ProcOfLine(Line:=i, prockind:=vbext_pk_Proc)
If curMacro <> newMacro Then
curMacro = newMacro
cboMacros.AddItem (curMacro)
Debug.Print curMacro
Else: newMacro = Null
End If
Next
Next
End If
Selection.InsertAfter vbCr
End If
x = ""
Next
Selection.Collapse wdCollapseEnd
End Sub问题是我可以返回关联文件中所有宏的名称,但效率非常低。85个宏名称需要@2分钟。这是因为程序读取每个模块(CountOfLines)的每一行。我只是希望能在我的else语句中使用一些魔法。如果当前宏与新宏相同,则只需跳到它们不同时。我不确定这是否可能。如果没有,有没有比CountOfLines更好的方法呢?
发布于 2010-10-19 03:00:11
您遇到的一个问题是ProcKind是一个输出,而不是输入,所以您首先需要创建一个变量,如下所示:
Dim ProcKind As VBIDE.vbext_ProcKind那么你的声明就是
newMacro = vbcomp.CodeModule.ProcOfLine(Line:=i, prockind)真正的答案是,你不需要遍历每一行,你可以从proc跳到proc:
For Each vbcomp In pj.VBComponents
With vbcomp.CodeModule
myStartLine = .CountOfDeclarationLines + 1
While myStartLine < .CountOfLines
newMacro = .ProcOfLine(i,prockind)
numLines = .ProcCountLines(newMacro,vbext_pk_Proc)
If curMacro <> newMacro Then
curMacro = newMacro
cboMacros.AddItem (curMacro)
Debug.Print curMacro
Else: newMacro = Null
End If
myStartLine = myStartLine + numLines
Wend
End With
Next发布于 2010-10-18 18:54:08
代码here几乎可以立即提取我正在处理的文件中的所有宏名称(39)。你不能改用它吗?
https://stackoverflow.com/questions/3957925
复制相似问题