这是我的代码:
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)。我只是希望可能有一些魔法可以在我的其他声明中执行。如果当前宏与newmacro相同,那么只要它们不同就跳过。我不确定这是否可行。如果没有,是否有比CountOfLines更好的方法?
答案 0 :(得分:0)
代码here在我正在处理的文件中拉出所有宏名称(39)。你不能改编它吗?
答案 1 :(得分:0)
你遇到的一个问题是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