2014-09-19 180 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