【问题标题】:Excel VBA ActiveX ListBox not allowing clickExcel VBA ActiveX ListBox 不允许单击
【发布时间】:2020-05-05 23:02:33
【问题描述】:

我创建了一些代码,用标签、文本框和列表框填充 Excel 工作表。用 .List=Sheets().Range().Value 填充 ListBox 后,我无法单击以选择一个项目。如果我保存工作表,关闭并重新打开它就可以正常工作。

我已经检查过了 http://blogs.technet.com/b/the_microsoft_excel_support_team_blog/archive/2014/12/11/forms-controls-stop-working-after-december-2014-updates-.aspx

但我没有收到错误,所以这似乎是错误的解决方法。

当我在 KB 中搜索以下内容时 http://support.microsoft.com/kb/3025036/EN-US

症状与我所经历的不同。

我也尝试使用 Sheets().Activate,如下所示: Excel ActiveX Listbox not enabled on file open

但这没有帮助,或者我执行不正确。

这是创建列表框的代码

Private Sub Create_ListBox_ActiveXControlProperties()

    Dim oLISTBOX As OLEObject

    Set oLISTBOX = ActiveSheet.OLEObjects.Add(classtype:="Forms.ListBox.1", Top:=35, Width:=500, Left:=650, Height:=600)
    ActiveSheet.OLEObjects("ListBox1").Object.Font.Size = 14
    ActiveSheet.OLEObjects("ListBox1").Object.ListStyle = 0
    ActiveSheet.OLEObjects("ListBox1").Object.List = Sheets("Search Criteria Control").Range("g1:g21").Value

End Sub

谁能建议我在哪里可以找到解决方案?

【问题讨论】:

    标签: vba excel listbox


    【解决方案1】:

    无法给您解释,但如果您将 Activesheet.Select 添加到您的 Sub 的末尾,那么您可以选择您的项目。

    【讨论】:

    • 好一个。我曾尝试在工作表上选择一个单元格,但没有任何作用。
    • 美丽。谢谢。
    【解决方案2】:

    另一种写法:

    Sub M_snb()
      With ActiveSheet.OLEObjects.Add("Forms.ListBox.1", , , , , , , 35, 50, 65, 60)
        .Object.Font.Size = 14
        .Object.List = ActiveSheet.Range("g1:g21").Value
        .Object.ListIndex = 0
        .Parent.select
      End With
    End Sub
    

    【讨论】:

    • 感谢 snb,我会尝试一下。 .Parent.Select 是否等同于 Activesheet.Select?
    • 是的,activesheet 是 ActiveX 控件的“容器”/“父级”。
    • 为此点赞。显然比我的菜鸟表单代码更紧凑。我更改了 ActiveSheet 以指定作为源的工作表(而不是活动表)并返回到“顶部:= 35,宽度:= 500,左侧:= 650,高度:= 600”。其中一个逗号已关闭,因此该框位于错误的位置,而且我永远不记得哪个字段是哪个。
    【解决方案3】:

    为了记录所有可能的解决方案,这对我有用。 所有论坛中提供的解决方法都没有帮助我。

    我动态添加了一堆列表框,包括位置、高度、宽度、列表范围等。当我的代码在工作表中创建控件时,我无法选择列表框中的项目。

    这就是解决我的问题的方法:.OLEObjects().Activate 您需要在创建控件后立即激活它。

    【讨论】:

    • 我花了一点时间来欣赏这个解决方案,但它是这个页面上唯一对我有用的解决方案。我有Set ListBox = ActiveSheet.OLEObjects.AddListBox.Activate 完成这项工作。 ActiveSheet.OLEObjects().Activate 给出错误,但 Activesheet.OLEObjects("ListBox1").Activate 按承诺工作。我想补充一点,可以通过手动关闭并再次打开设计模式来使新的 ListBox 工作。使用 VBA 做同样的事情没有用,因为设计模式会关闭 VBA。
    【解决方案4】:

    同样的问题。作为一种解决方法(app.activate 对我不起作用,并且不希望出现这种情况),您只需将高度加 1,它会轻微地重绘每个对象并重新激活它。

    ListBox_Options1.Height = ListBox_Options1.Height + 1
    

    这是一种解决方法,而不是错误的根源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 2014-01-10
      • 2021-08-08
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多