首页 > 解决方案 > ComboBox 中的值格式未正确显示

问题描述

所以我有一个带有时间列表的 ComboBox,ComboBox 从工作簿中的工作表中获取值并使用 RowSource 将它们放在 ComboBox 上。(这些单元格的格式为 hh:mm)

在此处输入图像描述

最初,Combobox将以正确的格式显示值

例如,9:00 将在时间列表中显示为 9:00,但选择时会将其转换为 0.375

在此处输入图像描述

为了解决这个问题,我使用了以下代码

Private Sub ComboBox5_Change()

ComboBox5.Value = VBA.Format$(ComboBox5.Value, "hh:mm")

End Sub

所以现在 9:00 以这种方式显示

在此处输入图像描述

除了 12:00 之外,这对于我列表中的所有时间都非常有效,当我选择 12:00 时,它会显示错误

在此处输入图像描述

有谁知道为什么当我选择 12:00 作为时间时这只会给我一个错误?

标签: excelvbauserform

解决方案


试试看,请下一个方法。它增加了一个小值(相当于一秒),以防0.5...

Private Sub ComboBox5_Change()
    Me.ComboBox2.Value = Format(IIf(Me.ComboBox5.Value = "0.5", _
               "0.500011574074074", Me.ComboBox5.Value), "hh:mm")
End Sub

如果您仍然有问题,这只能是Change事件本身代码触发第二次事件的结果。

由于Application.EnableEvents = False不适用于表单控件,我们必须构建自己的方式使事件仅触发一次:

  1. Private在表单模块之上创建一个变量:
    Private NoEvents As Boolean
  1. 以以下方式调整Change事件:
    Private Sub ComboBox5_Change()
        If Not NoEvents Then
            NoEvents = True
            Me.ComboBox5.Value = Format(IIf(Me.ComboBox5.Value = "0.5", _
                      "0.500011574074074", Me.ComboBox5.Value), "hh:mm")
        End If
    End Sub
  1. 在事件之后触发的事件中使布尔变量为 false Change
    Private Sub ComboBox5_Click()
        NoEvents = False
    End Sub

推荐阅读