首页 文章

从Userform Combobox设置工作簿变量

提问于
浏览
0

我正在为我的同事创建一个宏 . 他们每天获取一个文件,并在一天结束时必须将某些信息复制到另一个工作簿 . 宏是为了处理复制 . 我希望有一个带有组合框弹出窗口的用户窗体,其中包含当前打开的工作簿列表,因此它知道要从中复制哪个文件 . 如何进行设置以便在那里进行选择以设置具有该选择的工作簿变量?

我想要做的是:

Sub CopySub()

Dim wb As Workbook

UserForm1.Show

Set wb = Workbooks(ComboBox1.Value)
....Rest of Copy and Paste Code

以下是userform的代码:

Private Sub OK_Click()
'Take user selection and continue copy and paste code
UserForm1.Hide
End Sub

Private Sub Cancel_Click()
'Cancel everything, end all code
End
End Sub


Private Sub UserForm_Activate()

  'Populate list box with names of open workbooks.

  Dim wb As Workbook

  For Each wb In Workbooks

    ComboBox1.AddItem wb.Name

  Next wb

End Sub

2 回答

  • 0

    你的代码现在不能正常工作,因为 CopySub 不知道 ComboBox1 是什么\ . 此外,如果用户单击表单的X以关闭它而不是按取消按钮或单击确定按钮而不选择工作簿, CopySub 将继续运行 .

    获取表单信息有几种不同的方法 . 您当前代码最简单的方法是正确引用 ComboBox1 并添加一个简单的测试 .

    Sub CopySub()
       Dim wb As Workbook
    
       UserForm1.Show
       If UserForm1.ComboBox1.Value = "" Then
          Exit Sub
       End If
    
       Set wb = Workbooks(UserForm1.ComboBox1.Value)
       ' rest of code goes here
    
    End Sub
    

    要考虑的其他方法是让您的宏更快更容易运行的方法 . 如果表单上的唯一内容是用于选择工作簿的Combobox,用户将从键盘快捷键或菜单启动宏,请考虑让宏询问是否要在活动工作簿上运行宏 . 单击是以问题比单击下拉框,选择工作簿,然后单击确定要快得多 .

    Sub CopySub()
       Dim wb As Workbook
    
       If MsgBox("Do you want to run the macro on '" & ActiveWorkbook.Name & "'?", vbQuestion + vbYesNo) = vbYes Then
          Set wb = ActiveWorkbook
       Else
          UserForm1.Show
          If UserForm1.ComboBox1.Value = "" Then
             Exit Sub
          End If
          Set wb = Workbooks(UserForm1.ComboBox1.Value)
       End If
    
       ' rest of code goes here
    
    End Sub
    
  • 0

    在进一步搜索之后我找到了答案,并且它与mischab指出的相同,我没有创建全局变量,因此我的userform无法与子例程通信 . 我通过声明一个具有整个工作簿范围的变量来解决这个问题:

    Public wb1 As String
    
    Sub CopySub()
    
    Dim wbCAR As Workbook
    
    UserForm1.Show
    
    Set wbCAR = Workbooks(wb1)
    ....Rest of code
    

    并通过将userform代码设置为:

    Private Sub OK_Click()
    wb1 = ComboBox1.Value
    UserForm1.Hide
    End Sub
    
    Private Sub Cancel_Click()
    Unload Me
    End
    End Sub
    
    
    Private Sub UserForm_Activate()
    
      'Populate list box with names of open workbooks.
      Dim wb As Workbook
      For Each wb In Workbooks
        ComboBox1.AddItem wb.Name
      Next wb
    
    End Sub
    

相关问题