不能在同一模块中的其他子程序中使用来自输入框的变量

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