如何声明一个具有赋值的变量,该变量可用于vba中的所有模块?

如何声明一个具有赋值的变量,该变量可用于vba中的所有模块?,vba,Vba,我的问题是如何将我的变量和赋值用于所有模块,例如: 这是声明全局模块: sub global() public A as integer A=3 end sub 这是第一个模块(适用于表1): 这是第二个模块(适用于表2): *我为每个单独的工作表单独设置了模块文件,比如sheet1和sheet2 因此,我希望当第一个或第二个模块中的A和返回到global()时,会返回一个值 您需要的是在子模块或函数外部,在模块中,将如下公共变量声明为整数 Public A As Integer Sub

我的问题是如何将我的变量和赋值用于所有模块,例如:

这是声明全局模块:

sub global()
public A as integer 
A=3
end sub
这是第一个模块(适用于表1):

这是第二个模块(适用于表2):

*我为每个单独的工作表单独设置了模块文件,比如sheet1和sheet2

因此,我希望当第一个或第二个模块中的
A
和返回到global()时,会返回一个值


您需要的是在子模块或函数外部,在模块中,将如下
公共变量声明为整数

Public A As Integer

Sub SetGlobal()
    A = 3
End Sub
然后在别的地方:

Sub first()
    A = A + 3
    MsgBox A
End Sub
通常,您无法命名子
全局
,因为它是由
VBE
使用的名称


如果你想得到公共变量的最小值,那么你可以考虑创建一个类,它在<代码>获取< /代码>属性中有一个条件。如果最小值为

3
,则该类应如下所示:

Option Explicit

Private m_lA As Long    
Public Property Get A() As Long        
    A = m_lA
    If A < 3 Then A = 3    
End Property

Public Property Let A(ByVal lNewValue As Long)    
    m_lA = lNewValue    
End Property
Option Explicit

Public myVar As New publicA    
Public Sub TestMe()        
    Debug.Print myVar.A
    myVar.A = myVar.A * 30
    Debug.Print myVar.A    
End Sub
根据对问题的评论和编辑:

模块1

选项显式
公共服务
'Long和Integer在VBA中使用相同的内存量,
“因此,没有理由不使用Long
Sub-getglobal()
A=3
端接头

模块2

选项显式
副第一()
如果表1.单元格(1,“A”)>100,则
表3.单元格(A,“A”)=表1.单元格(1,“B”).值
如果结束
模1.A=模1.A+1
端接头

模块3

选项显式
次秒()
如果表2.单元格(1,“A”)>100,则
表3.单元格(A,“A”)=表2.单元格(1,“B”).值
如果结束
模1.A=模1.A+1
端接头

您需要在模块顶部的sub之外声明变量。@horst我已经尝试过,但无法运行。您有这些示例吗?当我从stackoberflow中发现时,大多数情况下只在一个模块中声明为public。如果您将
public Dim MyVar声明为Integer
它位于
Module1
的顶部,在任何
Sub
函数
之外,那么您可以从任何模块以
Module1.MyVar
@chronocidal>的形式访问它,您有一个例子吗?谢谢sry the global()只是一个例子,但当我这样声明时,我的另一个模块(另一个模块工作表)可以获得分配的值,然后在a=a+3之后将该值返回到全局并将全局值更改为a=6?@step-我猜答案是肯定的。@step“ModuleName.PublicVariableName”-因此,如果您的模块被调用为
Module1
,然后在
Module2
中,您可以键入
Module1.A
来访问变量
A
,该变量来自模块
Module1
Module1.A=Module1.A+3
@步骤:
getglobal()
first()
second()
是,而不是。您需要在它们之外声明变量,正如Vityata在他的examples@Vityata好的,我现在试试。非常感谢!我认为混淆的是,当OP说“第一个模块”时,它们实际上是指一个工作表模块,而不是一个通用代码模块。他们很有可能不理解其中的区别。@Chronocidal it弹出运行时错误1004应用程序定义的错误或对象定义的错误。@步骤这是什么意思--这些是您显式插入的常规代码模块,还是自动创建的
Sheet1
之类的代码窗口你呢?你使用短语“第一个模块(表1)”的方式令人困惑@JohnColeman我添加了一张照片,你可以从中了解我的意思。谢谢@约翰科勒曼第一个模块(对于表1),因为如果sub用于表1,我将模块1中的sub用于表1,如果sub用于表2,则将模块2用于表2。
Option Explicit

Private m_lA As Long    
Public Property Get A() As Long        
    A = m_lA
    If A < 3 Then A = 3    
End Property

Public Property Let A(ByVal lNewValue As Long)    
    m_lA = lNewValue    
End Property
Option Explicit

Public myVar As New publicA    
Public Sub TestMe()        
    Debug.Print myVar.A
    myVar.A = myVar.A * 30
    Debug.Print myVar.A    
End Sub