更改VBA常数的值

Joa*_*lai 1 excel vba excel-vba

我有一个函数,其中设置VBA常量如下:

Const KEY_TEXT As String = "mycystomtext"
Run Code Online (Sandbox Code Playgroud)

有没有办法以编程方式将VBA常数更改为其他文本?

我试图定义:

Const KEY_TEXT As String = Range("A1").value 
Run Code Online (Sandbox Code Playgroud)

但这会导致错误。

小智 5

根据定义,常数不能在初始化后更改。在定义变量时必须对其进行初始化。

  • @JoannaMikalai-您能解释一下为什么需要将其定义为常量吗?我无法想到VBA中的情况。也许,如果我们了解的话,我们可以提供替代方案。至于不愿投票的人-不是我。 (4认同)
  • 除了“如果您认为自己想更改它,不要将其定义为`Const`-只需将其定义为全局变量”,就没什么可添加的了。 (3认同)

Joa*_*lai 5

我正在回答我自己的问题,具体是:

有没有办法以编程方式将 VBA 常量更改为不同的文本?

Sub replace_run()
    Dim s As String
    Dim i As Long
    Dim VBProj As VBIDE.VBProject
    Dim VBComp As VBIDE.VBComponent
    Dim CodeMod As VBIDE.CodeModule

    With Application
        .EnableEvents = False
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With

    s = ThisWorkbook.Path
    wcodestring = s & "\myfile.xlsm"

    Workbooks.Open FileName:=wcodestring
    Set wb_code = Application.Workbooks("myfile.xlsm")
    Set VBProj_xl = Application.Workbooks("myfile.xlsm").VBProject

    Set VBProj = wb_code.VBProject
    Set VBComp = VBProj.VBComponents("Module1")
    Set CodeMod = VBComp.CodeModule


    With CodeMod
        For i = 1 To .CountOfLines
            If .Lines(i, 1) = "Const KEY_TEXT As String = " & Chr(34) & "mycystomtext" & Chr(34) Then
                .ReplaceLine i, "Const KEY_TEXT As String = " & Chr(34) & "mycystomreplace" & Chr(34)
            End If
        Next i
    End With

    wb_code.Close SaveChanges:=True

    Application.ScreenUpdating = True

End Sub
Run Code Online (Sandbox Code Playgroud)