【问题标题】:Excel VBA Sharing Variable Within Userfrom SubsUserfrom Subs中的Excel VBA共享变量
【发布时间】:2017-11-01 09:31:19
【问题描述】:

所以这不是什么大不了的事,但它让我很不舒服。我正在尝试在用户表单之间共享一个变量。声明公共变量似乎是一种简单的方法,但显然,您不能在用户窗体中声明公共变量。所以看来我必须在一个完全不相关的模块中声明变量,我觉得这很烦人。这是在用户表单中的子之间传递变量的唯一方法吗?

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

这是从列表框 (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

【问题讨论】:

    标签: excel vba variables global userform


    【解决方案1】:

    如果您在用户窗体模块的顶部声明一个变量,则该变量可以被用户窗体模块上的任何控件或过程访问。

    插入一个用户窗体并在其上放置两个命令按钮并将以下代码放置在用户窗体模块上。 启动用户窗体并单击两个命令按钮以查看如何以这种方式访问​​变量。

    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 不客气。是的,这是真的。如果您在模块顶部声明它们,则称为模块级变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 2021-03-27
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多