首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将VBA编码改为VBA编码

将VBA编码改为VBA编码
EN

Stack Overflow用户
提问于 2014-10-22 14:15:04
回答 1查看 4.7K关注 0票数 1

我需要改变一个常量,它引用了一个网址。我们的ADI模板有一个新的服务器路径,更新代码比下载所有新模板更容易。如何更新以下内容:

代码语言:javascript
复制
Const SERVLET_PATH = "http://webaddress.com"

代码语言:javascript
复制
Const SERVLET_PATH = "http://webaddress1.com"

这有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-22 19:23:28

首先,您需要添加对MicrosoftVisualBasicforApplicationExtenity5.3库的引用。

单击Tools>>References>>可扩展性5.3

然后,您需要包含要更新的模块的打开工作簿。这意味着当用户打开工作簿时,无法进行此更新。

代码语言:javascript
复制
Workbook.Open filePath

接下来,您需要遍历工作簿中的每个代码模块,查找要更改的常量。

代码语言:javascript
复制
Sub replaceConstant()
    Dim project As VBIDE.VBProject
    For Each project In Application.VBE.VBProjects

        Dim codeMod As VBIDE.CodeModule
        Dim component As VBIDE.VBComponent

        For Each component In project.VBComponents

            If component.Name <> "TheVeryUniqueNameOfTheCodeModuleWhereThisCodeResides" Then

                Set codeMod = component.CodeModule

                Dim startline As Long
                startline = 1 'find takes startline in byref and uses it as an output parameter.

                codeMod.Find Target:="Const SERVLET_PATH = ""http://webaddress.com""", _
                    startline:=startline, startcolumn:=1, endline:=codeMod.CountOfLines, endcolumn:=1

                codeMod.ReplaceLine startline, "Const SERVLET_PATH = ""http://webaddress1.com"""


            End If
        Next component

    Next project
End Sub    

以上代码之所以有效,是因为:

Find方法接受ByRef长参数。输入时,这些参数指定要搜索的行和列的范围。在输出时,这些值将指向找到的文本。

http://www.cpearson.com/excel/vbe.aspx

当然,您需要对您想要更改的每个工作簿执行此操作。这可能需要一些时间。

进一步参考资料:

  • CodeModule对象
  • 查找方法
  • ReplaceLine法
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26509578

复制
相关文章

相似问题

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