VBA如何在subs之间使用变量?

时间:2016-12-01 06:44:30

标签: vba excel-vba variables excel

我对VBA很陌生,我不知道如何在潜艇之间使用变量。代码应该是非常自我解释的:

Public Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim strWeapon As String
If Target.Address = "$I$8" Then
    MsgBox "You pick up a sword"
    strWeapon = "Sword"
ElseIf Target.Address = "$I$9" Then
    MsgBox "You pick up a magic staff"
    strWeapon = "Magic"
ElseIf Target.Address = "$I$10" Then
    MsgBox "You pick up a bow and arrows"
    strWeapon = "Bow"
End If
End Sub

Public Sub CommandButton1_Click()
If strWeapon = "Magic" Then
    UserForm1.Show
ElseIf strWeapon = "Sword" Then
    UserForm2.Show
ElseIf strWeapon = "Bow" Then
    UseForm2.Show
End If
End Sub

有没有办法可以在两个潜艇中使用strWeapon?我没有在第二个子中定义变量strWeapon时出错。 谢谢!

2 个答案:

答案 0 :(得分:3)

你有几个选择。

  1. 您可以使用shai rado提到的公共变量 - 这可能是最简单的,但是您应尽可能限制使用公共变量。

  2. 您可以将变量从一个子传递到另一个子,如下所示:

    sub Main()
        dim strWeapon as string
        strWeapon = "Fork"
        WillIWin strWeapon
    end sub
    
    sub WillIWin(strWeapon as string)
        select case strWeapon
            case "Gun"
                msgbox "Probably"
            case "Sword"
                msgbox "unlikely"
            case "Fork"
                Msgbox "Goodluck"
        end select
    End Sub
    
  3. 或者,如果您要传递多个变量,那么您可能会更好地使用课程,此选项需要的工作量比我愿意投入的更多,但CPearson有一个很好的入门课程。

答案 1 :(得分:1)

是的!

Public strWeapon as String

在任何模块的顶部,执行以下操作:

tpye Option Explicit然后紧接下面,放入公开声明。 然后,这可以在excel项目中的任何其他子例程OR模块中使用