【问题标题】:Set variable that is constant for all Subs设置对所有 Subs 恒定的变量
【发布时间】:2019-08-21 11:42:15
【问题描述】:

我的模块中有几个 Sub。我想设置可以在下面的所有 Subs 中使用的变量。怎么做?

假设变量是来自ThisWorkbook.Worksheets("Sheet1").Range("E1").Value 的文本,它的名称应该是FileNameINVREQ

如何在代码中实现它?我试过了:

Option Explicit

Const FileNameINVREQ As String = ThisWorkbook.Worksheets("Sheet1").Range("E1").Value

Private Sub CreateNewINVREQtoMFiles()

            ...
            ' PD Name Or title.
            oPVNew.PropertyDef = 0
            oPVNew.TypedValue.SetValue MFDatatypeText, FileNameINVREQ
            oPVsNew.Add -1, oPVNew
            ...
End Sub
Private Sub CreateINVREQtoMFiles()

        ...
        oFile.SourceFilePath = Environ("Temp") & "\" & FileNameINVREQ & ".docx"
        oFile.Title = FileNameINVREQ
        oFile.extension = "docx"
        oFiles.Add 0, oFile
        ...
End Sub

【问题讨论】:

  • 在声明中使用Public Const
  • @Dean - 它可以在您的 PC 上运行吗?当我尝试 Public Const a = Worksheets(1).Range("A1")? 时出现编译错误
  • 是的,这似乎不起作用...我也试过了
  • @Viyata 我在Public Const myStr = "My String text" 上测试过,可以编译.. 但见上面没有编译。注意到,谢谢:)

标签: excel vba


【解决方案1】:

常量意味着它不能被改变。对于一个变量,从一个单元格中获取数据,可以从任何地方访问一个不带参数的公共函数来完成这项工作:

Public Function FileNameINVREQ() As Variant
    FileNameINVREQ = ThisWorkbook.Worksheets("Sheet1").Range("E1").Value
End Function

【讨论】:

    【解决方案2】:

    从工作表中提取值在技术上并不是一个常数(因为该值可能会改变),因此您需要改用一个变量。但是,虽然您可以将变量声明为全局变量,但您不能将它们设置在子函数或函数之外。

    我的建议是将声明和设置值移动到它自己的子例程中,当您需要知道值时引用它。

    Global FileNameINVREQ as string
    
    Sub FileName()
      FileNameINVREQ = ThisWorkbook.Worksheets("Sheet1").Range("E1").Value
    End Sub
    

    更进一步,您可以将其完全废弃为变量,只需将该 FileName 子更改为函数!希望这些解决方案之一对您有用!

    【讨论】:

      猜你喜欢
      • 2018-11-06
      • 2023-02-03
      • 2011-05-31
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多