是否有可能在vba中声明一个公共variables,并指定一个默认值?
我想这样做,但它不会编译:
Public MyVariable as Integer = 123
达到这个目标的最好方法是什么?
.NET已经宠坏了我们:)你的声明对于VBA是无效的。
只有常数可以在应用程序加载时赋予一个值。 你声明他们是这样的:
Public Const APOSTROPHE_KEYCODE = 222
以下是我的一个vba项目的示例声明:
如果你正在寻找一些你声明一个公共variables,然后想要初始化它的值,你需要创build一个Workbook_Open子,并在那里进行初始化。 例:
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
确保你在工作簿对象中声明了这个子对象:
只是为您提供一个不同的angular度 –
我发现在函数调用之间维护公共variables不是一个好主意。 您需要使用的任何variables都应该存储在Subs和Functions中,并作为parameter passing。 一旦代码完成运行,您不应该期望VBA项目维护任何variables的值。
这样做的原因是只有大量的东西可以在使用工作簿时无意中重置VBA项目。 发生这种情况时,任何公共variables将重置为0。
如果您需要将值存储在您的潜艇和function之外,我强烈build议使用具有命名范围的隐藏工作表来处理需要保留的任何信息。
当然你知道,但如果它是一个常量,那么const MyVariable as Integer = 123
否则你的运气不好; variables必须在其他地方分配一个初始值。
你可以:
public property get myIntegerThing() as integer myIntegerThing= 123 end property
在一个Class模块中,然后全局创build它;
public cMyStuff as new MyStuffClass
所以cMyStuff.myIntegerThing
立即可用。
您可以在通用声明中定义variables,然后在环境中触发的第一个事件中对其进行初始化。
或者,您可以创build一个具有相关属性的类,并在初始化方法中初始化它们
如上所述,要声明全局可访问variables,您可以在public关键字之前的函数之外执行。
而且,因为在过程之外的作用是不允许的,例如,你可以创build一个叫InitGlobals的子类来初始化你的公共variables,然后你可以在你的语句开头调用这个子程序
这是一个例子:
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
已经有一段时间了,但我相信这将是:
Public MyVariable as Integer MyVariable = 123
这已经有一段时间了,但这可能会让你满意:
Public MyVariable as Integer: MyVariable = 123
这是有点难看,因为你必须重新inputvariables名,但它是在一行。