2014-09-19 185 views
0

什么是在用户窗体中创建组合框的最佳代码,以将时间显示为HH:MM AM/PM?Excel VBA时间格式组合框

现在,我已将组合框时间的来源作为代表工作表中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 
+0

这将有助于*看到*你在做什么。截图**和**相关的代码将有所帮助。我也建议不要将组合框项目采购到表单/公式。 – 2014-09-20 00:31:20

+0

感谢大卫,我用代码和屏幕截图更新了帖子。感谢您的反馈。我还试图找到一种方式,以便当用户单击组合框箭头时,滚动列表将从当前值开始,而不是回到列表顶部。你知道如何设置? – Michael 2014-09-20 15:37:04

+0

我已经更新了这个问题,以便更直接地将时间组合框格式化,这是我遇到的主要问题。 – Michael 2014-09-22 00:11:07

回答

0

我无法重现该问题。我注意到,在分配值时你没有使用Format函数,这可能是导致问题的原因。

我用一个组合框创建了一个用户窗体,并以一分钟的增量从8AM到5PM填充组合框。我将用户选择存储在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来完成。

+0

迪克,感谢您对组合框格式的反馈和提示,我认为这会有所帮助 - 我将继续努力,然后再试一次,看看是否可以解决问题。 “我”对象是否指定了专用子代码正在应用到的“用户窗体”? – Michael 2014-09-22 00:10:27

+0

是的,'Me'是指你所在的类模块,Userforms只是特殊的类模块。很多人不使用我(这是默认的,如果你忽略它),但我喜欢它的清晰度和自我暗示 - 输入“我”,并获得控制名称(和属性)的列表。 – 2014-09-22 14:11:06