Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA在Userfrom Subs中共享变量_Excel_Vba_Variables_Global_Userform - Fatal编程技术网

Excel VBA在Userfrom Subs中共享变量

Excel VBA在Userfrom Subs中共享变量,excel,vba,variables,global,userform,Excel,Vba,Variables,Global,Userform,所以这不是什么大不了的事,但它已经触动了我的皮肤。我试图在userform中的sub之间共享一个变量。声明公共变量似乎是一种简单的方法,但显然,不能从用户表单中声明公共变量。因此,我似乎必须在一个完全不相关的模块中声明变量,这让我非常恼火。这是在userform内的sub之间传递变量的唯一方法吗 在上下文中,我试图在设置用户窗体上设置“Ok”、“Apply”和“Cancel”按钮,其中“Ok”和“Apply”按钮永久性地进行我在设置中所做的更改 下面是从列表框(路径列表)中删除项目的按钮。列表框

所以这不是什么大不了的事,但它已经触动了我的皮肤。我试图在userform中的sub之间共享一个变量。声明公共变量似乎是一种简单的方法,但显然,不能从用户表单中声明公共变量。因此,我似乎必须在一个完全不相关的模块中声明变量,这让我非常恼火。这是在userform内的sub之间传递变量的唯一方法吗

在上下文中,我试图在设置用户窗体上设置“Ok”、“Apply”和“Cancel”按钮,其中“Ok”和“Apply”按钮永久性地进行我在设置中所做的更改

下面是从列表框(路径列表)中删除项目的按钮。列表框将数据存储在工作表上,但我不希望在单击“应用”之前从工作表中删除这些项目。我想与ApplyButton_Click子例程共享SelectedArray()变量,这样“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不客气。是的,没错。如果在模块顶部声明它们,则称为模块级变量。