是否可以在vba中声明公共变量并指定默认值?
我想这样做,但它不会编译:是否可以在vba中声明公共变量并指定默认值?,vba,variables,default-value,public,variable-declaration,Vba,Variables,Default Value,Public,Variable Declaration,我想这样做,但它不会编译: Public MyVariable as Integer = 123 实现这一点的最佳方法是什么?当然你知道,但是如果它是一个常量,那么const MyVariable as Integer=123否则你就倒霉了;必须在其他地方为变量指定初始值 你可以: public property get myIntegerThing() as integer myIntegerThing= 123 end property 在类模块中,然后全局创建它 public
Public MyVariable as Integer = 123
实现这一点的最佳方法是什么?当然你知道,但是如果它是一个常量,那么
const MyVariable as Integer=123
否则你就倒霉了;必须在其他地方为变量指定初始值
你可以:
public property get myIntegerThing() as integer
myIntegerThing= 123
end property
在类模块中,然后全局创建它
public cMyStuff as new MyStuffClass
因此,
cMyStuff.myIntegerThing
立即可用。您可以在常规声明中定义变量,然后在环境中触发的第一个事件中初始化它
或者,您可以自己创建一个具有相关属性的类,并使用initialise方法初始化它们。.NET已经破坏了我们:)
您的声明对VBA无效
只有常量才能在应用程序加载时指定值。你这样声明:
Public Const APOSTROPHE_KEYCODE = 222
以下是我的一个vba项目的示例声明:
如果您正在查找声明公共变量然后要初始化其值的内容,则需要创建工作簿\u Open sub并在那里进行初始化。
例如:
Private Sub Workbook_Open()
Dim iAnswer As Integer
InitializeListSheetDataColumns_S
HideAllMonths_S
If sheetSetupInfo.Range("D6").Value = "Enter Facility Name" Then
iAnswer = MsgBox("It appears you have not yet set up this workbook. Would you like to do so now?", vbYesNo)
If iAnswer = vbYes Then
sheetSetupInfo.Activate
sheetSetupInfo.Range("D6").Select
Exit Sub
End If
End If
Application.Calculation = xlCalculationAutomatic
sheetGeneralInfo.Activate
Load frmInfoSheet
frmInfoSheet.Show
End Sub
确保在工作簿对象本身中声明子对象:
只是为了给你提供一个不同的角度- 我发现在函数调用之间维护公共变量不是一个好主意。您需要使用的任何变量都应该存储在SUB和函数中,并作为参数传递。代码运行完成后,不应期望VBA项目维护任何变量的值 原因是在使用工作簿时,有大量的事情可能会无意中重置VBA项目。发生这种情况时,任何公共变量都会重置为0
如果您需要在sub和函数之外存储一个值,我强烈建议您对任何需要保留的信息使用一个带命名范围的隐藏工作表。这已经有一段时间了,但这可能会让您满意:
Public MyVariable as Integer: MyVariable = 123
这有点难看,因为您必须重新键入变量名,但它在一行上。如上所述,要声明全局可访问变量,您可以在前面带有public关键字的函数之外执行 而且,由于在过程之外不允许矫揉造作,例如,您可以创建一个名为InitGlobals的子函数来初始化您的公共变量,然后在语句的开头调用这个子例程 下面是一个例子:
Public Coordinates(3) as Double
Public Heat as double
Public Weight as double
Sub InitGlobals()
Coordinates(1)=10.5
Coordinates(2)=22.54
Coordinates(3)=-100.5
Heat=25.5
Weight=70
End Sub
Sub MyWorkSGoesHere()
Call InitGlobals
'Now you can do your work using your global variables initialized as you wanted them to be.
End Sub
这就是我在需要初始化全局常量时所做的:
1.添加名为
Globals
2.将这样的属性添加到
Globals
模块中:
Property Get PSIStartRow() As Integer
PSIStartRow = Sheets("FOB Prices").Range("F1").Value
End Property
Property Get PSIStartCell() As String
PSIStartCell = "B" & PSIStartRow
End Property
鲜为人知的事实:命名范围可以引用值而不是特定单元格。 这可以像“全局变量”一样使用,plus您可以在工作表单元格中引用VBA中的值,并且在关闭和重新打开工作簿后,分配的值甚至会保持不变
- 要“声明”名称
并将其赋值为myVariable
:123
ThisWorkbook.Names.Add "myVariable", 123
- 检索值(例如在
中显示值):MsgBox
- 或者,您可以使用字符串引用名称(与方括号中的结果相同)
- 要使用工作表上的值只需在公式中按原样使用它的名称即可:
=myVariable
- 事实上,您甚至可以存储函数表达式(有点像中的)
(诚然,我想不出这样做会有什么好处——但我也不在JS中使用它们。)
方括号只是该方法的快捷方式。我听说使用它们被认为是杂乱无章的,但我没有遇到任何问题,它们在Excel中的使用是由微软完成的 可能还有一种使用函数引用这些名称的方法,但我没有看到任何好处,所以我没有深入研究它
更多信息:
- Microsoft Office开发中心:
- Microsoft Office开发中心:
Globals
的模块,并在这个模块中定义Property Get
,它就像一个符咒。属性Get PSIStartRow()作为整数PSIStartRow=Sheets(“FOB价格”)。范围(“F1”)。值结束属性属性Get PSIStartCell()作为字符串PSIStartCell=“B”&PSIStartRow结束属性上述注释中的代码被损坏。我会把它贴在下面。
MsgBox Evaluate("myVariable")
=myVariable
ThisWorkbook.Names.Add "myDay", "=if(isodd(day(today())),""on day"",""off day"")"