【问题标题】:Excel Listbox listindex does not highlightExcel Listbox listindex 不突出显示
【发布时间】:2013-05-07 18:12:29
【问题描述】:

有更好的 excel 能力的人可以帮助我使用下面的代码吗?我已经在 Worksheet_Activate 事件中进行了设置。我有代码将 ActiveX 列表框设置为默认值,如下所示。无论出于何种原因,列表框都没有将默认值显示为突出显示的项目。所有其他逻辑似乎都可以正常工作,但下面的代码不会突出显示我的第一个列表框中的愚蠢的第一项,这让我很抓狂。我做错了什么?

With CTOverview.ListBox1
    .IntegralHeight = True
    .Height = 114.75
    .Width = 125.25
    .IntegralHeight = False
    .ListIndex = 0
    .Selected(0) = True
    .Value = "Entire Division"
End With

CTData.Range("Overview_RegionSelected").Value = CTOverview.ListBox1.Value

With CTOverview.ListBox2
    .IntegralHeight = True
    .Height = 114.75
    .Width = 150
    .IntegralHeight = False
    .ListIndex = -1
End With

感谢您的帮助。

【问题讨论】:

    标签: excel listboxitems vba


    【解决方案1】:

    将 .Selected 设置为 False 并立即将其设置为 True 对我有用:

    With Me.Charts_LB
        .ColumnHeads = False
        .RowSource = rng.Address
        .Height = 480
        .Selected(Charts_ListIndex) = False
        .Selected(Charts_ListIndex) = True
    End With
    

    【讨论】:

      【解决方案2】:

      我知道。我过去看到过这种奇怪的行为,完全没有解释。有时它起作用,有时它不起作用。试试这个。这会起作用。

      With CTOverview.ListBox1
          If .ListCount > 1 Then .Selected(1) = True
          .IntegralHeight = True
          .Height = 114.75
          .Width = 125.25
          .IntegralHeight = False
          .ListIndex = 0
          .Selected(0) = True
          .Value = "Entire Division"
      End With
      

      跟进

      这是一个比我之前给你的代码更好的代码。上面的代码仅限于我们需要更多超过 1 个Listcount。以下内容也适用于 1 Listcount

      Dim rng As Range, aCell As Range
      
      With CTOverview.ListBox1
          .IntegralHeight = True
          .Height = 114.75
          .Width = 125.25
          .IntegralHeight = False
          .ListIndex = 0
          .Selected(0) = True
          .Value = "Entire Division"
      
          Set rng = Range(.ListFillRange)
          For Each aCell In rng
              aCell.Formula = aCell.Formula
          Next
      End With
      

      【讨论】:

      • 感谢您的建议。我将该行添加到我的代码中,它确实有效。但是,我必须使用
      • 上面的评论好像没说完?
      • 很抱歉 - 我试图编辑它,但效果不太好。 :-)
      • 你知道为什么会这样吗?
      • 老实说,我不知道为什么会发生这种情况。而且我不确定这是否是一个错误。无论如何,我已经更新了我的答案。请参阅后续部分。您可能需要刷新页面。
      【解决方案3】:

      简化您的代码。使用.Selected 属性或.ListIndex 属性或.Value 属性来选择列表中的项目。

      在您的第一个列表框 (ListBox1) 中,您已使用所有三个属性来使默认选择生效。可能您的代码中的值不一致,例如列表的第一项不是“整个除法”。如果您的第一项仅是“整个部门”,则设置任何一个属性以实现您所需的选择。

      在第二个列表框(ListBox2)中,当您的代码有.ListIndex = -1 时,表示您要取消选择所有内容。因此,将所需的列表索引更改为 0 以选择第一项。

      鉴于您希望默认选择列表框的第一个选项,请以以下为基础。

      With CTOverview.ListBox1
          .ListIndex = 0
      End With
      
      With CTOverview.ListBox2
          .ListIndex = 0
      End With
      

      让我知道你的想法。

      【讨论】:

      • 我实际上是从 .ListIndex = 0 开始的,但后来我开始添加其他东西来试图弄清楚为什么这该死的东西不起作用。而且我不希望 Listbox2 选择任何东西,这样代码就可以了。您的第一个建议效果很好,但看起来有点奇怪——第二个项目被突出显示,然后第一个项目被选中。烦人的 MS 错误。
      • @user2296377 当 .listindex = 0 后跟 .value = 时会发生这种情况。 MS 完全按照我们编写的代码进行操作!
      【解决方案4】:

      所以我遇到了同样的问题,我参考了 Office 文档并意识到一切都取决于列表框应该成为焦点以使其值属性返回值的前提。

      我建议您只需在末尾添加一条线即可获得焦点。

      With CTOverview.ListBox1
          .IntegralHeight = True
          .Height = 114.75
          .Width = 125.25
          .IntegralHeight = False
          .ListIndex = 0
          .Selected(0) = True
          .Value = "Entire Division"
          .SetFocus
      End With
      

      【讨论】:

      • 您可能不需要 .Value 行来显式设置值。
      【解决方案5】:

      我在 UserForms 中看到了与 ListBox 控件(不是嵌入在工作表中的 ActiveX 控件)类似的问题,但由于我没有找到任何其他显示在前几个 Google 搜索页面上的帖子,所以我附上了我对此的解决方案,因为寻找 UserForm 解决方案的人很可能会看到这篇文章,而且它也可能对使用直接 ActiveX ListBox 控件的一些人有所帮助。

      在用户窗体中(至少)设置 .ListIndex = n 和 .Selected(n) = True 似乎根本没有帮助。我发现的唯一解决方法是,其中“n”是要选择/突出显示的列表项:

      Dim SaveVal As String
      With MyUserForm.SomeListBox
          SaveVal = .List(n)
          .Value = ""
          .Value = SaveVal
          .SetFocus   'Not required, but allows up/down arrow keys to function normally.
      End With
      

      请注意,仅将所选列表项重新分配为其当前值是行不通的,因为底层代码显然会检查这种情况并将其视为无操作。

      【讨论】:

        猜你喜欢
        • 2021-07-16
        • 2014-05-02
        • 1970-01-01
        • 1970-01-01
        • 2013-07-17
        • 1970-01-01
        • 1970-01-01
        • 2020-08-19
        • 1970-01-01
        相关资源
        最近更新 更多