2

有更好的 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

谢谢你的帮助。

4

5 回答 5

2

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

With Me.Charts_LB
    .ColumnHeads = False
    .RowSource = rng.Address
    .Height = 480
    .Selected(Charts_ListIndex) = False
    .Selected(Charts_ListIndex) = True
End With
于 2018-02-13T05:58:22.410 回答
0

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

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
于 2013-05-07T18:30:26.667 回答
0

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

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

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

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

With CTOverview.ListBox1
    .ListIndex = 0
End With

With CTOverview.ListBox2
    .ListIndex = 0
End With

让我知道你的想法。

于 2013-05-07T18:44:00.063 回答
0

所以我遇到了同样的问题,我参考了 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
于 2015-04-02T13:39:15.687 回答
0

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

在 UserForms 中(至少)设置 .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

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

于 2017-06-09T18:55:33.410 回答