不能在同一模块中的其他子程序中使用来自输入框的变量
Can't use variable from input box in other subs in same module
所以我想从输入框中获取一个变量。然后我使用变量命名我的 sheet。但是我无法在其他潜艇中引用 sheet 以切换回它。它给了我一个错误。我的代码可能很草率,因为我是新手,我可能比我需要的更多地分离我的潜艇,但我一直在一次测试它们。不管怎样,它是:
Dim name As String
name = InputBox("Please enter the date of the report. Ex: 7-28 to 8-25-17. This will show up as: All HCM changes 7-28 to 8-25-17 for the tab name.", "Tab Name Date")
If Len(name) = 0 Then 'Checking if Length of name is 0 characters
MsgBox "Valid date not entered. Please Re-Run the Macro to input the date.", vbCritical
Else
MsgBox "The tab will now be named, All HCM changes " & name & "."
End If
Sheets("Sheet1").Select
Sheets("Sheet1").name = ("All HCM changes " & name)
Call Change_Header_Colors
Call Insert_Columns
Call Create_LEGEND
Call Sort_by_Action_then_Last_Name
Call Freeze_Panes
在这些调用中,我引用了 name 变量。但它给了我一个错误。我尝试在模块中的第一个 sub 之前声明变量,但这没有用。这就是我在这些调用中尝试使用它的方式。
Sub Sort_by_Action_then_Last_Name()
'
' This is ACTUALLY sorting by action then by person #. Which is what we
wanted. Can change it easily.
'
'
Dim name As String
ActiveWorkbook.Worksheets("All HCM changes " & name).Select
Cells.Select
ActiveWorkbook.Worksheets("All HCM changes " & name).SORT.SortFields. _
Clear
ActiveWorkbook.Worksheets("All HCM changes " & name).SORT.SortFields. _
Add Key:=Range("A2:A246"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("All HCM changes " & name).SORT.SortFields. _
Add Key:=Range("E2:E246"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("All HCM changes " & name).SORT
.SetRange Range("A1:U246")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
您需要将变量传递给其他子程序:
Sub Sort_by_Action_then_Last_Name(name as String)
并在调用中声明变量时从辅助子中删除 Dim name as String
行。
然后当你调用它时,你会这样调用它:
Call Sort_by_Action_then_Last_Name(name)
要么让你的程序(Sub)接受一个参数来传递工作表名称,即
Sub Main()
Dim name As String
name = InputBox("Please enter worksheet name")
'call your other procedures
Change_Header_Color name
End Sub
Sub Change_Header_Color(ByVal name As String)
'do some stuff here
'use the input from the parameter in some way
Worksheets("foo").Range("A1").Value = name
End Sub
或者,您可以定义一个全局变量并在不同的 Sub 中使用。
Private name As String
Sub Main()
name = InputBox("Please enter worksheet name")
'call your other procedures
Change_Header_Color
End Sub
Sub Change_Header_Color()
'do some stuff here
'use the input from the parameter in some way
Worksheets("foo").Range("A1").Value = name
End Sub
所以我想从输入框中获取一个变量。然后我使用变量命名我的 sheet。但是我无法在其他潜艇中引用 sheet 以切换回它。它给了我一个错误。我的代码可能很草率,因为我是新手,我可能比我需要的更多地分离我的潜艇,但我一直在一次测试它们。不管怎样,它是:
Dim name As String
name = InputBox("Please enter the date of the report. Ex: 7-28 to 8-25-17. This will show up as: All HCM changes 7-28 to 8-25-17 for the tab name.", "Tab Name Date")
If Len(name) = 0 Then 'Checking if Length of name is 0 characters
MsgBox "Valid date not entered. Please Re-Run the Macro to input the date.", vbCritical
Else
MsgBox "The tab will now be named, All HCM changes " & name & "."
End If
Sheets("Sheet1").Select
Sheets("Sheet1").name = ("All HCM changes " & name)
Call Change_Header_Colors
Call Insert_Columns
Call Create_LEGEND
Call Sort_by_Action_then_Last_Name
Call Freeze_Panes
在这些调用中,我引用了 name 变量。但它给了我一个错误。我尝试在模块中的第一个 sub 之前声明变量,但这没有用。这就是我在这些调用中尝试使用它的方式。
Sub Sort_by_Action_then_Last_Name()
'
' This is ACTUALLY sorting by action then by person #. Which is what we
wanted. Can change it easily.
'
'
Dim name As String
ActiveWorkbook.Worksheets("All HCM changes " & name).Select
Cells.Select
ActiveWorkbook.Worksheets("All HCM changes " & name).SORT.SortFields. _
Clear
ActiveWorkbook.Worksheets("All HCM changes " & name).SORT.SortFields. _
Add Key:=Range("A2:A246"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("All HCM changes " & name).SORT.SortFields. _
Add Key:=Range("E2:E246"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("All HCM changes " & name).SORT
.SetRange Range("A1:U246")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
您需要将变量传递给其他子程序:
Sub Sort_by_Action_then_Last_Name(name as String)
并在调用中声明变量时从辅助子中删除 Dim name as String
行。
然后当你调用它时,你会这样调用它:
Call Sort_by_Action_then_Last_Name(name)
要么让你的程序(Sub)接受一个参数来传递工作表名称,即
Sub Main()
Dim name As String
name = InputBox("Please enter worksheet name")
'call your other procedures
Change_Header_Color name
End Sub
Sub Change_Header_Color(ByVal name As String)
'do some stuff here
'use the input from the parameter in some way
Worksheets("foo").Range("A1").Value = name
End Sub
或者,您可以定义一个全局变量并在不同的 Sub 中使用。
Private name As String
Sub Main()
name = InputBox("Please enter worksheet name")
'call your other procedures
Change_Header_Color
End Sub
Sub Change_Header_Color()
'do some stuff here
'use the input from the parameter in some way
Worksheets("foo").Range("A1").Value = name
End Sub