我知道如何在包含设置变量的Sub中调用运行动作的子时在两个Subs之间传递变量,但是我想从例程宏中调用变量setup Sub但是无法获得正确的声明变量以使其起作用的地方。我希望将变量设置为单独的,以便被其他Subs调用。下面的代码不能作为两个子
Sub X_Variables(s1, s2, s3, rng1, rng2, rng3)
'
' x - Defined Cell Names - ANFlightText , AUFlightText , ABFlightText
Dim s1 As Worksheet
Dim s2 As Worksheet
Dim s3 As Worksheet
Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range
Set s1 = Sheets("5_Angebot") ' WorkSheet
Set s2 = Sheets("5_Auftragsb") ' WorkSheet
Set s3 = Sheets("5_Abschluss") ' WorkSheet
Set rng1 = s1.Range("B15") ' End on cell
Set rng2 = s2.Range("B15") ' End on cell
Set rng3 = s3.Range("B15") ' End on cell
End Sub
由
调用Sub X_Offer_Hide_Flight_Text()
'
' ***** Hide Flight Text *****
' x - Defined Cell Names - ANFlightText , AUFlightText , ABFlightText
' x (s1, s2, s3, rng1, rng2, rng3)
' ***** Set up veriables *****
Call X_Variables
' *****
' Hide rows
Application.ScreenUpdating = False ' do not see screen updating
s1.Select
Range("ANFlightText").Select ' x
Selection.EntireRow.Hidden = True
rng1.Select
s2.Select
Range("AUFlightText").Select ' x
Selection.EntireRow.Hidden = True
rng2.Select
s3.Select
Range("ABFlightText").Select ' x
Selection.EntireRow.Hidden = True
rng3.Select
s1.Select
Application.ScreenUpdating = True ' see screen updating
End Sub
答案 0 :(得分:1)
您必须将变量声明为全局,在子。
之外public s1 As Worksheet
public s2 As Worksheet
public s3 As Worksheet
public rng1 As Range
public rng2 As Range
public rng3 As Range
Sub X_Variables()
'
' x - Defined Cell Names - ANFlightText , AUFlightText , ABFlightText
Set s1 = Sheets("5_Angebot") ' WorkSheet
Set s2 = Sheets("5_Auftragsb") ' WorkSheet
Set s3 = Sheets("5_Abschluss") ' WorkSheet
Set rng1 = s1.Range("B15") ' End on cell
Set rng2 = s2.Range("B15") ' End on cell
Set rng3 = s3.Range("B15") ' End on cell
End Sub
答案 1 :(得分:1)
使用模块。 (在VBA中:插入 - >模块)
模块在功能上与类似,它应该在这里工作正常。在模块中,您可以设置一些属性:
Public CustomerID As Integer
例如,。然后在sub中,您可以使用点表示法来提取该信息:
ID = ModuleName.CustomerID
然后,您可以在excel文件中的任何位置使用该模块,甚至可以将其导出。如果您希望能够使用模块中的信息初始化数组,您可以编写一个函数来执行该操作,然后通过引用传入一个数组(使用ByRef关键字)然后当模块完成时,您将拥有一个数组中包含您需要的数据。我建议使用数组而不是像在这里那样使用1,2,3命名多个变量。例如:
在模块中,AirlineInfo:
Sub Setup(ByRef s() As Worksheet, ByRef rng() As Range)
Set s(1) = Sheets("5_Angebot") ' WorkSheet
Set s(2) = Sheets("5_Auftragsb") ' WorkSheet
Set s(3) = Sheets("5_Abschluss") ' WorkSheet
Set rng(1) = s(1).Range("B15") ' End on cell
Set rng(2) = s(2).Range("B15") ' End on cell
Set rng(3) = s(3).Range("B15") ' End on cell
End Sub
然后从文件的其他地方你可以在模块中调用该函数(就像类中的方法一样)
Dim s(1 to 3) As Worksheet
Dim rng(1 to 3) As Range
ArilineInfo.Setup(s, rng)
作为快速修复,您可以尝试将ByRef添加到当前设置中,但可能需要使用该模块。