在公共函数(Excel VBA)中声明变量
我有几个公共函数,它们在另一个函数中被依次调用。。。大概是这样的:在公共函数(Excel VBA)中声明变量,vba,excel,Vba,Excel,我有几个公共函数,它们在另一个函数中被依次调用。。。大概是这样的: Public Sub func1() Operation 1 End Sub Public Sub func2() Operation 2 End Sub Public Sub func3() Operation 3 End Sub Sub Execute() Call func1() Call func2() Call func3() End Sub Dim LastRow as Long La
Public Sub func1()
Operation 1
End Sub
Public Sub func2()
Operation 2
End Sub
Public Sub func3()
Operation 3
End Sub
Sub Execute()
Call func1()
Call func2()
Call func3()
End Sub
Dim LastRow as Long
LastRow = Sheets("Project_Name").Cells(Rows.count, "B").End(xlUp).row
我想了解的是,如果我在每个函数中声明一个公共变量,比如:
Public Sub func1()
Operation 1
End Sub
Public Sub func2()
Operation 2
End Sub
Public Sub func3()
Operation 3
End Sub
Sub Execute()
Call func1()
Call func2()
Call func3()
End Sub
Dim LastRow as Long
LastRow = Sheets("Project_Name").Cells(Rows.count, "B").End(xlUp).row
假设我可以在func1()
中声明一次,并在func2()
和func3()
中使用它,这样安全吗
或者我必须在每个函数中声明它3次
谢谢这里有一个全局变量,您可以在
func1
中赋值(尽管我会更改这些名称,因为它们是sub)。注意,公共变量在SUB之外的模块顶部声明。我已将一个子系统的名称更改为my_Execute
,因为Execute
让我想起了许多编程语言中的一个关键字
Option Explicit
Public a As Long
Public Sub func1()
a = 1
End Sub
Public Sub func2()
MsgBox a
End Sub
Public Sub func3()
MsgBox a
End Sub
Public Sub my_Execute()
func1
func2
func3
End Sub
在本地声明一次,并通过值(ByVal)作为参数传递全部。注意:这里它在
my_Execute
中本地声明,然后作为参数传递给其他sub
Option Explicit
Public Sub func1(ByVal a As Long)
MsgBox "func1 " & a
End Sub
Public Sub func2(ByVal a As Long)
MsgBox "func2 " & a
End Sub
Public Sub func3(ByVal a As Long)
MsgBox "func3 " & a
End Sub
Public Sub my_Execute()
Dim a As Long
a = 1
func1 a
func2 a
func3 a
End Sub
通过
ByRef
以便可以在途中更改a
:
Option Explicit
Public Sub func1(ByRef a As Long)
a = a + 1
End Sub
Public Sub func2(ByRef a As Long)
a = a + 2
End Sub
Public Sub func3(ByRef a As Long)
a = a + 3
End Sub
Public Sub my_Execute()
Dim a As Long
a = 1
func1 a
func2 a
func3 a
MsgBox a
End Sub
关于ByRef和ByVal的信息,这里有一个全局变量,您可以在
func1
中赋值(尽管我会更改这些名称,因为它们是sub)。注意,公共变量在SUB之外的模块顶部声明。我已将一个子系统的名称更改为my_Execute
,因为Execute
让我想起了许多编程语言中的一个关键字
Option Explicit
Public a As Long
Public Sub func1()
a = 1
End Sub
Public Sub func2()
MsgBox a
End Sub
Public Sub func3()
MsgBox a
End Sub
Public Sub my_Execute()
func1
func2
func3
End Sub
在本地声明一次,并通过值(ByVal)作为参数传递全部。注意:这里它在
my_Execute
中本地声明,然后作为参数传递给其他sub
Option Explicit
Public Sub func1(ByVal a As Long)
MsgBox "func1 " & a
End Sub
Public Sub func2(ByVal a As Long)
MsgBox "func2 " & a
End Sub
Public Sub func3(ByVal a As Long)
MsgBox "func3 " & a
End Sub
Public Sub my_Execute()
Dim a As Long
a = 1
func1 a
func2 a
func3 a
End Sub
通过
ByRef
以便可以在途中更改a
:
Option Explicit
Public Sub func1(ByRef a As Long)
a = a + 1
End Sub
Public Sub func2(ByRef a As Long)
a = a + 2
End Sub
Public Sub func3(ByRef a As Long)
a = a + 3
End Sub
Public Sub my_Execute()
Dim a As Long
a = 1
func1 a
func2 a
func3 a
MsgBox a
End Sub
关于ByRef和ByVal的信息您可以在全局声明一次或在本地声明三次,或者先声明,然后作为参数传递给以后的用户。这取决于你对这个变量做了什么。另外,删除Call关键字。不需要。你能给我一个你如何在全球范围内声明的例子吗?还有一个关于如何首先声明并稍后作为参数传递的示例?您可以全局声明一次或局部声明三次,或者先声明并稍后作为参数传递。这取决于你对这个变量做了什么。另外,删除Call关键字。不需要。你能给我一个你如何在全球范围内声明的例子吗?还有一个关于如何先声明然后作为参数传递的示例?如果您需要进一步的解释/澄清,请让我知道。谢谢-我认为第一种方法(全局var)是最有效和最优雅的。你认为呢?这真的取决于你将如何处理这个变量。阅读以下内容:如果您需要进一步的解释/澄清,请让我知道。谢谢-我认为第一种方法(全局var)是最有效和优雅的。你认为呢?这真的取决于你将如何处理这个变量。阅读以下内容: