【问题标题】:VBA Dialog box to select range in different workbookVBA对话框选择不同工作簿中的范围
【发布时间】:2013-08-10 03:27:03
【问题描述】:

我希望允许用户选择可能位于不同工作簿中的范围。

我尝试使用 inputbox("",type:=8) 来执行此操作,它可以在工作簿中选择数据,但拒绝让我在不同的工作簿中选择范围。

因此,我想要一个允许我执行此任务的对话框。

【问题讨论】:

  • 在用户窗体中使用 refEdit 控件。但是,在使用 RefEdit Control 从其他工作簿获取范围时必须非常小心,否则 Excel 会挂起!如果你想要一个例子,请告诉我,因为这是鲜为人知的东西......

标签: excel range dialog vba


【解决方案1】:

既然我有空,我就给你做了一个例子

创建一个Userform 并放置一个ComboBox、一个RefEdit 控件和一个Label

接下来将这段代码粘贴到用户表单中

Private Sub UserForm_Initialize()
    Dim wb As Workbook

    '~~> Get the name of all the workbooks in the combobox
    For Each wb In Application.Workbooks
        ComboBox1.AddItem wb.Name
    Next

    ComboBox1 = ActiveWorkbook.Name
End Sub

'~~> This lets you toggle between all open workbooks
Private Sub Combobox1_Change()
    If ComboBox1 <> "" Then Application.Workbooks(ComboBox1.Text).Activate

    Label1.Caption = "": RefEdit1 = ""
End Sub

'~~> And this lets you choose the relevant range
Private Sub RefEdit1_Change()
    Label1.Caption = ""

    If RefEdit1.Value <> "" Then _
    Label1.Caption = "[" & ComboBox1 & "]" & RefEdit1
End Sub

这是您在运行用户窗体时得到的结果



【讨论】:

  • 如果目标工作簿名称有空格,或者目标工作表有空格(至少在 Excel 2007 中),这将失败。您需要拆分“!”周围的 refEdit 值,如果 RefEdit 添加了这些引号,则删除工作表名称周围的引号,并将引用设置为“[工作簿名称]工作表名称”!参考(注意单引号)
  • 有点迟到的评论,但正如@personne3000 指出的那样,将最后一行更改为Label1.Caption = "'[" &amp; ComboBox1 &amp; "]" &amp; Replace(RefEdit1,"!","'!"),并且应该可以使用空格。
  • 聪明的解决方案!我还使用了Userform,但使用“选择范围”命令按钮而不是RefEdit 控件。单击它会启动类型 8 InputBox 并将完整范围的地址(包括书籍和工作表引用)保存到 Label。在另一本书中选择范围时,Excel 没有将焦点返回到原书上的 Userform。为了解决这个问题,我在最初显示时将表单设置为vbModeless。用户选择范围后,我隐藏表单,激活原书,添加 1/4 秒延迟,再次显示表单。设置起来很痛苦,但现在效果很好。
猜你喜欢
  • 1970-01-01
  • 2012-11-22
  • 2017-08-24
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多