Формат значения в ComboBox отображается неправильно - PullRequest
0 голосов
/ 16 июня 2020

Итак, у меня есть ComboBox со списком раз, ComboBox получает значения из листа в книге и использует RowSource, чтобы поместить их в ComboBox. (Эти ячейки имеют формат чч: мм)

enter image description here

Первоначально ComboBox будет отображать значения в правильном формате, но затем при выборе одного из этих значений он будет показывать выбранное время как число, а не время

Например, 9:00 будет отображаться как 9:00 в списке времен, но при выборе преобразует его в 0,375

enter image description here

Чтобы решить эту проблему, я использовал следующий код

Private Sub ComboBox5_Change()

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

End Sub

Итак, теперь 9:00 отображается таким образом

enter image description here

Это отлично работает в любое время, которое у меня есть в моем списке, кроме 12:00, когда я выбираю 12:00, отображается ошибка

enter image description here

Кто-нибудь знает, почему это выдает мне ошибку только тогда, когда я выбираю 12:00 в качестве времени?

1 Ответ

1 голос
/ 16 июня 2020

Попробуйте, пожалуйста, следующий подход. Он добавляет небольшое значение (эквивалент секунды) в случае 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
Адаптируйте событие 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
Сделать логическую переменную ложной в случае, когда событие запускается после Change одного:
    Private Sub ComboBox5_Click()
        NoEvents = False
    End Sub
...