2016-12-01 78 views
0

我是VBA的新手,我不知道如何在subs之间使用变量。该代码应该是自我解释:VBA如何在subs之间使用变量?

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

你的意思是作为一个String变量被更新并且可以在两个Sub中显示吗?你可以使用'公共strWeapon作为字符串',把这个代码行(对于convinance)高于'Subs',在'Option Explicit'下面 –

+0

在全局子Worksheet_SelectionChange之外声明strWeapon –

+0

我像你们说的那样添加它,删除昏暗的strweapon作为字符串在顶部,现在没有任何反应,当我点击commandButton – Ricky

回答

2

您有几个选项。

  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

是的!

Public strWeapon as String

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

类不Option Explicit然后立即下面,把公共声明。 这可以在你的Excel项目中的任何其他子程序或模块中使用

+0

这是否对你有任何奇迹? – user1

相关问题