Excel VBA在Userfrom Subs中共享变量
所以这不是什么大不了的事,但它已经触动了我的皮肤。我试图在userform中的sub之间共享一个变量。声明公共变量似乎是一种简单的方法,但显然,不能从用户表单中声明公共变量。因此,我似乎必须在一个完全不相关的模块中声明变量,这让我非常恼火。这是在userform内的sub之间传递变量的唯一方法吗 在上下文中,我试图在设置用户窗体上设置“Ok”、“Apply”和“Cancel”按钮,其中“Ok”和“Apply”按钮永久性地进行我在设置中所做的更改 下面是从列表框(路径列表)中删除项目的按钮。列表框将数据存储在工作表上,但我不希望在单击“应用”之前从工作表中删除这些项目。我想与ApplyButton_Click子例程共享SelectedArray()变量,这样“Apply”按钮就可以从工作表中删除单元格。注释代码就是我希望“应用”按钮所做的Excel VBA在Userfrom Subs中共享变量,excel,vba,variables,global,userform,Excel,Vba,Variables,Global,Userform,所以这不是什么大不了的事,但它已经触动了我的皮肤。我试图在userform中的sub之间共享一个变量。声明公共变量似乎是一种简单的方法,但显然,不能从用户表单中声明公共变量。因此,我似乎必须在一个完全不相关的模块中声明变量,这让我非常恼火。这是在userform内的sub之间传递变量的唯一方法吗 在上下文中,我试图在设置用户窗体上设置“Ok”、“Apply”和“Cancel”按钮,其中“Ok”和“Apply”按钮永久性地进行我在设置中所做的更改 下面是从列表框(路径列表)中删除项目的按钮。列表框
Private Sub RemovePathButton_Click()
Dim SelectedArray()
Dim ctr As Integer
ctr = 1
For intCount = PathList.ListCount - 1 To 0 Step -1
If PathList.Selected(intCount) = True Then
ReDim Preserve SelectedArray(ctr)
SelectedArray(ctr) = intCount
ctr = ctr + 1
End If
Next intCount
For i = 1 To UBound(SelectedArray)
' Dim num As Integer
' num = SelectedArray(i) + 4
' Worksheets("Settings").Range("A" + CStr(num)).Delete (xlShiftUp)
PathList.RemoveItem (SelectedArray(i))
Next
End Sub
如果在UserForm模块顶部声明变量,则UserForm模块上的任何控件或过程都可以访问该变量 插入一个UserForm并在其上放置两个命令按钮,然后在UserForm模块上放置以下代码。 启动UserForm并单击两个命令按钮,查看如何以这种方式访问变量
Option Explicit
Dim Str As String
Private Sub CommandButton1_Click()
MsgBox Str
End Sub
Private Sub CommandButton2_Click()
Call Test
End Sub
Private Sub UserForm_Initialize()
Str = "This variable can be accessed by any code on UserForm Module."
End Sub
Sub Test()
MsgBox Str
End Sub
非常感谢。我知道事情必须如此简单。这也适用于常规模块吗?只需在所有子模块在模块内共享该变量之前声明该变量?@AlecHolmes不客气。是的,没错。如果在模块顶部声明它们,则称为模块级变量。