【问题标题】:Set Listbox selection as variable将列表框选择设置为变量
【发布时间】:2019-06-24 14:46:28
【问题描述】:

我想创建一个类似于“补丁”文件的东西,我可以将它发送给用户,他们使用它来修补他们现有的模板。

我想要做的是有一个带有列表框的用户表单,显示所有当前打开的 Excel 文件,然后用户选择他们想要修补的文件并单击一个按钮来运行修补脚本。

作为一个整体,我对用户表单和 vba 非常陌生,并且很难尝试将“Listbox1.Selection”设置为后续补丁代码可以引用的变量。我目前用于用户表单/列表框的代码如下(它只允许选择项目:

Private Sub UserForm_Activate()

Dim wb As Workbook

For Each wb In Workbooks
    If Windows(wb.Name).Visible Then _
      ListBox1.AddItem wb.Name
Next

End Sub

一旦用户选择了文件,我该如何将其设置为变量?

【问题讨论】:

    标签: excel vba listbox userform


    【解决方案1】:

    如何将其设置为变量?

    Private Sub doPatch()
    With Me.ListBox1
        Dim currIndex&
        currIndex = .ListIndex             ' assign zerobased index number to variable
    
        ' how do I go about setting that as a variable?
          Dim currWB
          currWB = .List(currIndex, 0)     ' get chosen list element in column zero based on current index
    
        ' 'or simply:
        ' currWB = .Value                  ' sufficient in your case as only one column listed
    
        ' display both variables in immediate window of your VB Editor
          Debug.Print "zerobased Listindex#: " & currIndex & " ~> " & currWB
    
        ' do patch stuff...
    
    End With
    End Sub
    
    

    最终你可以通过命令按钮和/或双击来调用上述过程,例如通过

    Private Sub CommandButton1_Click()
        doPatch
    End Sub
    
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        doPatch
    End Sub
    

    【讨论】:

    • 所以第一组脚本将列表框选择设置为变量,而第二组脚本将使用变量集运行“补丁”脚本?
    • 是的,用于doPatch 过程;如果您希望它在用户窗体代码模块中使用,您必须在外部声明变量,即在代码模块顶部(声明头,例如在Option Explicit 之后):Dim currIndex& 或 Dim currIndex As Long 并只执行过程中的赋值。 - 如果有帮助,请随时通过标记绿色复选标记将我的上述答案标记为已接受。
    【解决方案2】:

    在您的用户窗体中添加一个命令按钮并添加以下代码:

    Private Sub CommandButton1_Click()
    
    ActiveSheet.Range("A1").Value = ListBox1.Text
    
    
    End Sub
    

    这会将 Selected 选项打印到 A1。您可以将其保存到任何您想要的变量中。

    基本上ListBox1.Text 会给你选择的选项。

    【讨论】:

    • 这会将工作簿名称设置为 A1 范围内的文本,但是当我需要运行脚本以修补“报告”工作簿时如何调用它?
    • 只需使用var_name = Activesheet.Range("A1").Value ...。现在您将在 var_name 中拥有名称,这是您的变量。您可以在补丁代码或其他任何地方指定它,工作表的名称不会出现在任何地方,您可以使用上述语句在任何代码中读取它。 @SimoKeng​​span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多