Excel VBA时间格式的组合框

时间:2014-09-19 22:25:36

标签: excel vba excel-vba combobox

在用户表单中创建组合框以将时间显示为HH:MM AM / PM的最佳代码是什么?

现在,我将组合框的时间作为一系列十进制值,表示工作表中的1分钟增量;时间格式化是在组合框更改事件上完成的(有14个组合框按编号顺序命名,因此当最后一个更改时,它会遍历所有14个组合框。)

Private Sub COMBOBOX_14_Change()

    Dim i As Integer

        i = 1
        For i = i To 14 Step 1
            INPUT_FORM.Controls("COMBOBOX_" & i) = Format(INPUT_FORM.Controls("COMBOBOX_" & i), "HH:MM AM/PM")

        Next i

        End Sub

1 个答案:

答案 0 :(得分:0)

我无法重现这个问题。我注意到您在分配值时没有使用格式化功能,这可能是造成问题的原因。

我使用组合框创建了一个用户表单,并以一分钟为增量从上午8点到下午5点填充组合框。我将用户选择存储在Sheet1的A1中。当我选择12:00 PM,关闭并重新打开表单时,它仍显示12:00。当我点击下拉箭头时,它会在正确的位置开始。也许你可以发现我的代码和你的代码之间的区别。

Private Sub UserForm_Initialize()

    Dim i As Long
    Dim j As Long

    For i = 8 To 17
        For j = 0 To 59
            Me.ComboBox1.AddItem Format(TimeSerial(i, j, 0), "hh:mm AM/PM")
        Next j
    Next i

    If Not IsEmpty(Sheet1.Range("a1").Value) Then
        Me.ComboBox1.Value = Format(Sheet1.Range("A1").Value, "hh:mm AM/PM")
    End If
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    Sheet1.Range("A1").Value = Me.ComboBox1.Value

End Sub

要记住的一件重要事情是组合框中的东西是文本。即使它们看起来像数字,日期,时间,布尔等,它只是文本。因此,当您以某种方式显示它时,请始终尝试自己进行转换,而不是依靠Excel来执行此操作。