可以通过另一个模块中的另一个方法访问ThisWorkbook Excel对象的Private Sub Workbook_Open中声明的变量吗?我想在我的代码开头声明并分配一个变量,任何使用它的模块都可以更改。当下一个方法调用变量时,这个变化应该反映在变量中。
我在一个模块中有一个sub,它为公共变量赋值。 我要求module1设置的值可以访问module2的值
答案 0 :(得分:5)
全局变量需要具有Public
可访问性,并在标准模块中的模块范围中声明(。 BAS)。
Option Explicit
Public Foo As Long ' global variable
全局变量的问题在于它们可以通过代码中的任何位置读取和写入:全局状态很容易导致不可维护的意大利面条代码,应该避免只要有可能。
有许多替代方案,特别是使用参数:
Option Explicit
Public Sub SomeEntryPoint()
Dim foo As Long ' local variable
DoSomething foo
MsgBox foo 'prints 42
End Sub
'this procedure could be in any module, public.
Private Sub DoSomething(ByRef foo As Long)
foo = 42 'byref assignment; caller will receive the updated value
End Sub
另一种选择,如果变量需要由声明它的模块编写,但需要从其他地方读取,则使用属性强>:
Option Explicit
Private foo As Long ' private field
Public Sub DoSomething()
'do stuff...
foo = 42
'...
End Sub
Public Property Get SomeFoo() As Long
SomeFoo = foo
End Property
现在中的代码模块可以根据需要写到foo
,而其他模块只能读 {{1}通过foo
属性 - 假设字段和属性在SomeFoo
中定义:
Module1
答案 1 :(得分:4)
在@David的答案的基础上,这是如何使用Dim和Public及其差异(在模块中,名为import { ViewChild, AfterViewInit } from '@angular/core';
import { MatStepper } from '@angular/material';
Component({
.....
})
export class ComponentClass implements AfterViewInit {
@ViewChild('stepper') stepper: MatStepper;
ngAfterViewInit() {
this.stepper.selectedIndex = 1;
}
}
编写以下内容并运行Modul1
):
TestMe
这就是你得到的:
Dim a As String
Public b As String
Private c As String
Global d As String
Private Sub TestA()
'Whatever is not declared in TestMe, would take its value from here for the print.
'^-If it is declared, the value would be attached to the public/private/dim/glb above.
a = 11
b = 22
c = 33
d = 44
End Sub
Private Sub TestMe()
Dim a As String
'Dim b As String
'Dim c As String
Dim d As String
a = 1
b = 2
c = 3
d = 4
TestA
Debug.Print a; vbTab; Modul1.a
Debug.Print "----------------"
Debug.Print b; vbTab; Modul1.b
Debug.Print "----------------"
Debug.Print c; vbTab; Modul1.c
Debug.Print "----------------"
Debug.Print d; vbTab; Modul1.d
End Sub
答案 2 :(得分:2)
否 - 变量应在普通模块中声明为Public。
答案 3 :(得分:0)
' Public variable
Public a as String
' Local variable
Public sub hello()
Dim a as String
End sub
第一个a
是公开的,您可以在任意位置使用,第二个变量是本地的,您可以使用的唯一网站是函数hello()
。所以这两个变量都不同。
答案 4 :(得分:0)
无法调出,因为您正在呼叫私人潜艇。
为了拥有可以公开更改的变量,请尝试在任何Sub:
之外Public wBk As Workbook
Public var As String
这将声明变量。要修改值,需要在公共子例程中设置它们:
Public Sub myPublicVar()
Set wBk = Workbooks("Workbook1.xlsm")
Set var = "Whatever you like"
End Sub
如果那时你希望你的模块或子程序包含变量,你可以执行以下操作
Sub myOtherSub()
Call myPublicVar
MsgBox var
End Sub
希望这有帮助!