在VBA用户窗体组合框中输入12:00 PM

问题描述 投票:0回答:2

我有这个显示时间范围的vba用户窗体组合框。在行源中,我输入了12:00 PM。但是每次我在组合框中单击12:00 PM时,它就会显示12:05 AM。知道如何解决这个问题吗?

excel vba
2个回答
0
投票

使用点击事件而不是更改事件

Private Sub ComboBox5_Click()
    Dim t As Double

    With ComboBox5
        t = Val(.List(.ListIndex))
        .Value = Format(t, "hh:mm:ss AM/PM")
    End With

End Sub

0
投票

ComboBox处理文本字符串。 Excel将时间记录为1的一部分。12:00 PM = 0.5(一天半)。因此,第一个问题是将什么加载到ComboBox中。您是否加载了像“ 0.5”这样的数字-作为字符串,当然是因为ComboBox只接受字符串(VBA可能会在不通知您的情况下为您完成转换)-还是作为文本字符串,例如“ 12:00 PM”。无论哪种方式,ComboBox都将保存RowSource范围内的任何内容。

另一个问题是ComboBox如何将其列表中的字符串转换为它显示的字符串。借助于Excel中的单元格格式和VBA中的Format()函数进行转换。显示不同时间的事实表明发生了转换。查找在ComboBox的事件之一(例如Change事件)上运行的代码。

请控制住,我建议您将文本字符串导入到ComboBox中,例如“ 12:00 PM”。如果加载文本字符串,则下拉列表将在列表和Cbx中正确显示它们。如果要在计算中使用Cbx值,请使用TimeValue()函数进行转换。

Dim MyTime As Double
MyTime = TimeValue(ComboBox1.Value)
如果Cbx中的字符串表示计算机可以理解的格式的时间,则

将正确的编号分配给MyTime”。确保这一点的最佳方法是将这些值存储为true Times(表示0.5表示12:00 PM)并将这些值加载到Cbx中时将其转换为时间字符串。使用类似Format(0.5, "hh:mm AM/PM")的代码进行转换。用双精度数据类型的变量替换“ 0.5”。如果您希望继续使用RowSource范围,请在其中使用如下公式进行设置:=Text(A1, "hh:mm AM/PM"),其中A1保留真实时间。

© www.soinside.com 2019 - 2024. All rights reserved.