【问题标题】:Assigning Excel VBA ActiveX ListBox .Selection to a TextBox将 Excel VBA ActiveX ListBox .Selection 分配给文本框
【发布时间】:2015-01-24 02:33:24
【问题描述】:

我正在尝试单击 ActiveX 列表框上的选择并将值分配给文本框,然后清除列表框。这看起来很简单,但我 在第一行获取“对象不支持此属性或方法”

这是我正在使用的:

Private Sub ListBox1_Click()

    ActiveSheet.OLEObjects("TextBox3").Object.Value = ActiveSheet.OLEObjects("ListBox1").Object.Selection
    ActiveSheet.OLEObjects("ListBox1").Object.Selection = ""

End Sub

感谢您对如何使这个词或资源进行搜索的任何想法。

【问题讨论】:

  • 没用。同样的错误。
  • 刚刚发现 ActiveSheet.OLEObjects("TextBox3").Object.Text = ActiveSheet.OLEObjects("ListBox1").Object.Value 用于将列表框选择放入文本框。并且 ActiveSheet.OLEObjects("ListBox1").Object.Value = "" 似乎在 ListBox 值中放置了一个空值。当我尝试使用 msgbox 时,我收到错误“无效使用 null。但是 ListBox 选择仍然突出显示,如果可能的话,我希望取消选择它。
  • 我已尝试使用此处的每个建议:stackoverflow.com/questions/18654252/…,但无法让它们中的任何一个从列表框项目中删除突出显示。

标签: excel vba listbox


【解决方案1】:

你的代码会像这样写得更干净:

Private Sub ListBox1_Click()
  TextBox1.Value = ListBox1.Text
  ListBox1.Selected(ListBox1.ListIndex) = False
End Sub

但是有一个问题:第二行在ListBox1_Change 事件中不起作用(因为它会创建一个无限循环)。我尝试使用Application.EnableEvents = False,但没有帮助。

我认为您需要将选择的重置放在另一个事件中,例如 KeyUpMouseUp

【讨论】:

  • 我想我明白了。取消选择本身是一个“点击”事件,所以点击事件子不断被调用?
  • 是的。在类似的情况下,您通常将Application.EnableEvents = False 放在前面,将Application.EnableEvents = True 放在更改将触发事件的对象之后。但在这种情况下,Excel 似乎甚至阻止您尝试。
  • 好的。谢谢。对于您的 mouseup 建议,我如何确定 X 和 Y 值?
  • 我建议使用MouseUpKeyUp 事件,因为它们在Click 之后被触发(我认为)。你不需要 x 和 y。
  • 好的。谢谢斯坦奇。我会在板上单独问一个 Mouseup 问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 2019-09-13
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多