Excel 同一模块中多个vba宏的变量和常量&;工作手册
在同一个Excel工作簿中编写了很多小的sub()之后,我意识到我经常使用相同的部分代码、变量和常量。因此,我决定为代码编写functions(),并将变量&constant/static声明为公共外部函数和sub。我对vba声明非常陌生,这并不容易。让我给你一个我想要实现的总结。我已在工作簿的模块目录下的一个模块中编写了所有函数和子函数Excel 同一模块中多个vba宏的变量和常量&;工作手册,excel,vba,Excel,Vba,在同一个Excel工作簿中编写了很多小的sub()之后,我意识到我经常使用相同的部分代码、变量和常量。因此,我决定为代码编写functions(),并将变量&constant/static声明为公共外部函数和sub。我对vba声明非常陌生,这并不容易。让我给你一个我想要实现的总结。我已在工作簿的模块目录下的一个模块中编写了所有函数和子函数 Option Explicit Public ToDate As String ' variable I use in many sub and funct
Option Explicit
Public ToDate As String ' variable I use in many sub and functions
Public MyPath As String ' variable I use in many sub and functions
Public NameOfWorker As Variant ' constant I use in many sub and functions
Public Salary As Double ' constant I use in many sub and functions
NameOfWorker = Cells(14, 19) ' !!! PB : 14 is highlighed with error : incorrect instruction outside a procedure
Salary = Cells(20, 7).Value '!!! same as above
我应该如何以及在何处声明此类常量/静态?我应该写一个“特殊”程序来声明所有这些变量和常量吗?我尝试了很多方法来声明它们,但都没有成功
Public Static NameOfWorker = Cells(14, 19) As String ' not working
''''''
Public Static nameOfWorker As String
NameOfWorker = Cells(14, 19) ' not working
''' etc etc
谢谢你的帮助
编辑:经过更多阅读,我找到了一个解决方案:
Public Const MY_PATH = "Y:\path\to\directory\"
Public Const WORKERNAME = "14, 19"
还不错:-)问得好
我将在模块中的所有子节点上方对全局变量进行模糊处理,但在某些子节点内的方便位置初始化全局变量。例如:
Public NameOfWorker As String
Public AgeOfWorker As Long
Public SetupComplete As Boolean
Sub MAIN()
If SetupComplete Then
Else
NameOfWorker = Sheets("Sheet1").Range("B9")
AgeOfWorker = Sheets("Sheet1").Range("B10")
SetupComplete = True
MsgBox "Global variable set up complete!"
End If
End Sub
您可以创建一个名为
DataHelper
的新模块,如下所示:
Private NameOfWorker As String
Private AgeOfWorker As Long
Private SetupComplete As Boolean
Public Function GetNameOfWorker()
If NameOfWorker = "" Then
NameOfWorker = Sheets("SomeSheet").Cells(14, 19)
End If
GetNameOfWorker = NameOfWorker
End Function
Public Function GetAgeOfWorker()
...
End Function
现在,您可以在任何其他代码中检索该值:
Sub SomeMethod()
Cells(1, 1).Value = DataHelper.GetNameOfWorker()
End Sub
…如果设置了,您就不必担心了。TY谢谢您的回答,但在我看来,这会让我有更多的代码编写,而这不是我想要的。我的想法是以一种简单的方式扩展变量/常量的范围。**EDIT**:我知道我需要编写与常量一样多的帮助函数,对吗?我不确定是否完全理解,但我会尝试一下。顺便说一句,如果将变量的范围限定到同一模块内的所有过程是痛苦的,那么我会喜欢Ctrl C,Ctrl V:-)。编辑:明白了。Globals在内部执行所有程序并初始化。谢谢你的反馈@GABX如果这个答案对你有用的话,你应该考虑把它标记为被接受的答案……完成了。即使我很懒,并且在寻找更像Java的“静态初始化块”的东西,我也会接受这个答案。