首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从外部文件快速读取宏

从外部文件快速读取宏
EN

Stack Overflow用户
提问于 2010-10-18 17:35:03
回答 2查看 111关注 0票数 1

下面是我的代码:

代码语言:javascript
复制
    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更好的方法呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-19 03:00:11

您遇到的一个问题是ProcKind是一个输出,而不是输入,所以您首先需要创建一个变量,如下所示:

代码语言:javascript
复制
Dim ProcKind As VBIDE.vbext_ProcKind

那么你的声明就是

代码语言:javascript
复制
newMacro = vbcomp.CodeModule.ProcOfLine(Line:=i, prockind)

真正的答案是,你不需要遍历每一行,你可以从proc跳到proc:

代码语言:javascript
复制
             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
票数 0
EN

Stack Overflow用户

发布于 2010-10-18 18:54:08

代码here几乎可以立即提取我正在处理的文件中的所有宏名称(39)。你不能改用它吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3957925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档