【问题标题】:ComboBox inputbox causes reselection of rangeComboBox 输入框导致重新选择范围
【发布时间】:2018-08-16 04:06:19
【问题描述】:

目前我正在开发一个用户表单,只要单击组合框下拉按钮,就会提示输入框输入范围。

The problem is that whenever the range is selected (selecting a cell and then clicking ok), the userform is unselected (greys out), shows an empty dropdown list and forces me to reselect a range after I click anywhere on the workbook .

有什么方法可以防止点击下拉按钮时重新选择范围?

代码如下:

Private Sub ComboBox1_DropButtonClick()
    Dim InputCell As Range
    Set InputCell = Application.InputBox("Select Lookup Cell", "Obtain Object Range", Type:=8)
    ComboBox1.Text = InputCell.Address(0, 0, external:=True)
End Sub

【问题讨论】:

  • 谁能帮我格式化这个问题?我不知道为什么,但我无法添加图片。它告诉我缩进我的代码...@PeterT 非常感谢。
  • RefEdit 对象有问题!
  • 似乎DropButtonClick 事件被触发了两次,一次是在进入的时候,一次是在离开的时候......因此出现了问题。
  • 即使移除通常会导致问题的框架也无济于事

标签: vba excel


【解决方案1】:

当我过去使用RefEdit 对象时,我使用了真实的东西(我知道它有问题)并且只使用了Change 事件。

也许你可以只使用Enter 事件(你只需要第一次忽略它,如果它是第一个在初始化时获得焦点的对象)

资源:

Using RefEdit Controls in Excel Dialogs - 乔恩·珀尔帖

RefEdits 必须直接放在用户窗体本身上。 RefEdit在一帧或多页上,会发生奇怪的事情, 包括奇怪的 Excel 崩溃。

RefEdits 不得用于无模式表单。 RefEdits 用于无模式表单 表单会导致奇怪的 Excel 崩溃。

应避免使用 RefEdit 事件过程。 不应使用 RefEdit 事件 行为可靠,它们可能会导致很难的 VBA 错误 调试。

必须删除对 RefEdits 的引用。 当用户窗体添加到 VB项目,Excel添加了对Microsoft Forms 2.0 Object的引用 图书馆。该参考是正确操作所必需的 项目中的用户窗体。要查看您的项目有哪些参考资料, 在 Project Explorer 中选择项目,然后选择 References 从“工具”菜单中。

Alternative to Excel’s Flaky RefEdit Control - 乔恩·珀尔帖

新方法在对话框中使用 TextBox 而不是 RefEdit。

TextBox 不像 RefEdit 那样直接与范围交互。相反,当单击此下拉按钮时,对话框会暂时隐藏,并且会出现一个 InputBox 来征求用户的输入。

"使用类型 8 来表示范围对象可能很诱人,但是 是一个模糊的故障,导致它在工作表时失败 包含使用公式的条件格式条件 定义。幸运的是,使用 Type 0 来指定公式就可以了 很好。”

Cannot use keyboard shortcuts to select ranges in RefEdit control in Excel

【讨论】:

  • 我必须首先说我不知道​​组合框是 RefEdit 对象的一部分。否则,我想我会远离组合框以减少遇到的问题。感谢您提供第二个资源。
【解决方案2】:

来自此来源:Ozgrid

虽然我将使用自定义文本框,但如果有人想使用组合框,这也可以工作。

Private Sub ComboBox1_DropButtonClick()
    Static Abort As Boolean

    If Abort Then Exit Sub
    Abort = False

    Dim InputCell As Range
    Set InputCell = Application.InputBox("Select Lookup Cell", "Obtain Object Range", Type:=8)

    ComboBox1.Text = InputCell.Address(0, 0, external:=True)

    Abort = True
End Sub

【讨论】:

  • 仅供参考,如果用户取消输入,Set InputCell =... 将出错。如果这是您需要用On Error Resume Next 包装它的唯一时间之一。然后可以查看If Not InputCell is Nothing Then,继续设置地址。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多