【问题标题】:Change VBA coding with VBA Coding使用 VBA 编码更改 VBA 编码
【发布时间】:2014-12-18 00:40:56
【问题描述】:

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

Const SERVLET_PATH = "http://webaddress.com"

Const SERVLET_PATH = "http://webaddress1.com"

这可能吗?

【问题讨论】:

  • ?请详细说明?您可以访问代码吗?你大致知道它是如何工作的吗?您应该可以像在问题中所做的那样更改地址
  • 我可以这样做,但我想创建一个带有按钮宏的工作簿,当它们打开旧工作簿时更新服务器路径。我需要一个用户友好且简单的工具。另外,我想学习如何做到这一点,因为我知道我会再次遇到这个问题。我正在部署 Oracle,我们将有多个服务器更新,至少有人告诉我。
  • 是的,我确实可以访问代码。
  • 如果它改变了,它就不是常数,所以不要让它成为常数。您应该将值存储在配置文件或注册表中。然后您可以构建一个 UI 来更改值。
  • @DickKusleika - 我们一致认为,最好从一开始就避免这种情况。但是,OP 有一个需要解决的问题,并且似乎不是“高级”VBA 用户,因此在这种情况下,务实的方法可能就足够了。然而,正如您所注意到的,这不是“最佳实践”。

标签: vba excel metaprogramming constants


【解决方案1】:

首先,您需要添加对 Microsoft Visual Basic for Applications Extensibility 5.3 库的引用。

单击工具>>参考>> Microsoft Visual Basic for Applications Extensibility 5.3

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

Workbook.Open filePath

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

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 Long 参数。输入后,这些参数指定要搜索的行和列的范围。在输出时,这些值将指向找到的文本。

CPearson.com - Programming the VBA Editor

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

更多资源:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多