2014-09-19 3 views
0

Каков наилучший код для создания combobox в пользовательской форме для отображения времени как HH: MM AM/PM?Комбинированная форматированная Excel VBA

Прямо сейчас, у меня есть источник для значений combobox как диапазон десятичных значений, составляющих 1-минутный прирост рабочего листа; форматирование времени выполняется в событии изменения combobox (имеется 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

Было бы полезно * видеть * то, что вы на самом деле делаете. Скриншоты ** И ** соответствующий код поможет. Я также предлагаю не использовать элементы списка со списком для листа/формулы. –

+0

Спасибо Дэвиду, я обновил сообщение с кодом и скриншотом. Я ценю ваши отзывы. Я также пытаюсь найти способ, чтобы при щелчке пользователем стрелки со списком список прокрутки начинался с текущего значения и не возвращался в начало списка. Вы знаете, как это установить? – Michael

+0

Я обновил вопрос, чтобы больше сосредоточиться на форматировании combobox как времени, что является основной проблемой, с которой я столкнулся. – Michael

ответ

0

Я не смог воспроизвести проблему. Я отмечаю, что вы не используете функцию Format при назначении значения, и это может быть причиной проблемы.

Я создал пользовательскую форму с выпадающим списком и заполнил поле со списком от 8 утра до 5 вечера с шагом в одну минуту. Я сохраняю выбор пользователей в A1 листа Sheet1. Когда я выбираю 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

Dick, спасибо за отзыв и отзыв о форматировании combobox, я думаю, что это поможет - я собираюсь работать и попробовать еще раз и посмотреть, исправляет ли это проблему. Является ли имя объекта «Me» ссылкой на «Userform», к которому применяется частный подкод? – Michael

+0

Да, 'Me' относится к модулю класса, в котором вы находитесь, а Userforms - это просто специальные модули классов. Многие люди не используют Me (это значение по умолчанию, если вы его опускаете), но мне это нравится для ясности и для автосумбия - введите «Me.» и получите список имен (и свойств) управления. –