3

在同一个 Excel 工作簿中写了很多小的 sub() 之后,我意识到我经常使用相同的部分代码、变量和常量。因此,我决定为代码编写 funcions(),并将变量和常量/静态声明为 Public 外部函数和子函数。我对 vba 声明很陌生,这并不容易。让我总结一下我想要实现的目标。我已经在工作簿模块目录下的一个模块中编写了所有功能和子。

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"

还不错:-)

4

2 回答 2

2

您可以创建一个名为类似的新模块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

...如果它已设置,您永远不必担心。

于 2013-10-28T13:41:02.027 回答
1

好问题!

我会将全局变量暗到模块中所有子项之上,但在某个子项中的一个方便位置初始化全局变量。例如:

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
于 2013-10-28T13:32:51.183 回答