是否有可能在vba中声明一个公共variables,并指定一个默认值?

我想这样做,但它不会编译:

Public MyVariable as Integer = 123 

达到这个目标的最好方法是什么?

.NET已经宠坏了我们:)你的声明对于VBA是无效的。

只有常数可以在应用程序加载时赋予一个值。 你声明他们是这样的:

 Public Const APOSTROPHE_KEYCODE = 222 

以下是我的一个vba项目的示例声明:

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名,但它是在一行。