列表框在收集列表框背景颜色时未选中

时间:2014-05-23 19:11:20

标签: excel vba excel-vba listbox

我有一个列表框和代码,以确保它(和其他元素)被选中。我在代码中添加了一个ELSE,这样如果ListBox有一个选定的项目,它会将背景颜色更改为白色。如果先前尝试的条目是重复的(将BG更改为红色),则需要进行此操作,但更容易将其设为默认值。

我的comboBox和textBox不这样做。知道我可以做些什么不同以便只有Initialize函数清除它吗?

谢谢,

以下是清除listBox所选项目的代码段。评论上面的行似乎是造成这种情况。

编辑:每次更改背景颜色时都会取消选择。当我导致重复时,它也会取消选择,这不会改变背景颜色。因此,在许多情况下,列表框会自行取消选择。如果我能找到其中一个的原因(其中两个列在这里),那么也许我可以解决第三个问题。

Function HighlightEmpty(ByVal nameSelect As Boolean, ByVal comboSelect As Boolean, ByVal listSelect As Boolean) As Boolean
' Highlight empty fields
If Not nameSelect Then
    Enter_New_DTC_Form.SignalNameTxtBox.BackColor = RGB(255, 0, 0)
Else
    Enter_New_DTC_Form.SignalNameTxtBox.BackColor = RGB(255, 255, 255)
End If

If Not comboSelect Then
    Enter_New_DTC_Form.ComboBox1.BackColor = RGB(255, 0, 0)
Else
    Enter_New_DTC_Form.ComboBox1.BackColor = RGB(255, 255, 255)
End If

If Not listSelect Then
    Enter_New_DTC_Form.ListBox1.BackColor = RGB(255, 0, 0)
Else 
    **'This is where it breaks**
    Enter_New_DTC_Form.ListBox1.BackColor = RGB(255, 255, 255)    
End If

' Set focus to first empty field on form
If Not nameSelect Then
    Enter_New_DTC_Form.SignalNameTxtBox.SetFocus
ElseIf Not comboSelect Then
    Enter_New_DTC_Form.ComboBox1.SetFocus
ElseIf Not listSelect Then
    Enter_New_DTC_Form.ListBox1.SetFocus
End If

' Return boolean to trigger message
HighlightEmpty = Not nameSelect Or Not comboSelect Or Not listSelect
End Function

2 个答案:

答案 0 :(得分:2)

我发现原帖已超过2年,但由于我使用Excel 2013和VBA 7.1遇到了这个问题,因此它仍然具有相关性。在编码方面,我只是一个业余爱好者,但我想出了以下代码作为解决方法。

此代码将在数据经过验证后使用,并且您已准备好进入下一步。

您最终找到所选列表项的索引,向其添加1,将所选列表项设置为 next / previous 项,然后将其设置回实际项。我不知道为什么这是必要的,但它确实有效。

package main

import (
    "fmt"
    "math"
)

func pow(x, n, lim float64) float64 {
    v float64 = math.Pow(x,n) // line 9
    if v<lim {
        return v
    } else {
        fmt.Printf("%g >= %g\n", v, lim)
    }   
    return lim 
}

func main() {
    fmt.Println(
        pow(3, 2, 10),
        pow(3, 2, 20),
    )   
}

希望这会有所帮助。我花了很多时间研究,找不到根本原因的解决方案,但在我自己的电子表格中实现了这个代码。

答案 1 :(得分:0)

可能的解决方案是存储选择,更改BackColor然后重新应用选择;

Public Sub UpdateBackgroundColor()
    Dim sel() As Boolean: sel = GetSelectedIndexs()

    list_box.BackColor = &H80000005

    SetSelectedIndexs sel
End Sub

Private Function GetSelectedIndexs() As Boolean()
    If list_box.ListCount > 0 Then
        ReDim sel(0 To list_box.ListCount - 1) As Boolean

        Dim i As Integer
        For i = 0 To list_box.ListCount - 1
            sel(i) = list_box.Selected(i)
        Next

        GetSelectedIndexs = sel
    Else
        ReDim GetSelectedIndexs(0)
    End If
End Function

Private Function SetSelectedIndexs(sel() As Boolean)
    Dim i As Integer
    For i = LBound(sel) To UBound(sel)
        list_box.Selected(i) = sel(i)
    Next
End Function