Userfrom Subs

时间:2017-05-31 14:11:28

标签: excel vba variables global userform

所以这不是一个大问题,但它已经在我的皮肤下。我正在尝试在用户表单中的subs 之间共享一个变量。声明一个公共变量似乎是一种简单的方法,但显然,你不能在用户表单中声明公共变量。所以我似乎必须在一个完全不相关的模块中声明变量,我觉得这令人讨厌。这是在userform中的subs之间传递变量的唯一方法吗?

对于上下文,我正在尝试在“设置”用户窗体上设置“确定”,“应用”和“取消”按钮,其中“确定”和“应用”按钮会永久地对设置中所做的更改进行更改。

这是从列表框中删除项目的按钮(PathList)。列表框将数据存储在工作表中,但我不希望这些项目实际上从工作表中删除,直到我点击“应用”。我想与ApplyButton_Click子例程共享SelectedArray()变量,以便“应用”按钮实际上可以从工作表中删除单元格。注释代码是我想要“应用”按钮的目的。

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

1 个答案:

答案 0 :(得分:0)

如果在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