2015-02-23 4 views
0

Я пытаюсь создать временную линию через Excel и VBA, имея часы (1-24), перечисленные в диапазоне A1: A24; Я создал ComboBox, заполнил список с этим диапазоном, и теперь я пытаюсь связать эти два, так что, если я выберу определенный час в ComboBox, Excel отобразит «Test» по одной ячейке справа от этой конкретной ячейки из данного диапазона (например, если я выберу «8» в ComboBox, тогда Excel отобразит «Тест» в B8, так как значение A8 равно «8»)Если Cell in Range Matches ComboBox Value Then right Cell Value

Вот как я получил небольшое знание о VBA, что у меня есть:

Private Sub Combobox1_Change() 

    For Each cell In Range("A1:A24") 
     If cell.Value = Me.ComboBox1.Value Then 
      cell.Offset(0, 1).Value = "Test" 
     End If 
    Next 

End Sub 

Было бы здорово, если бы кто-то помог мне справиться с этим!

ответ

0

Если список упорядочен 1 - 24, просто используйте

Private Sub ComboBox1_Change() 
Dim MyRange As Range 

    Set MyRange = [A1]     ' or wherever your list starts 
    MyRange(ComboBox1.Value, 2) = "Test" ' address the range object by row, column 
End Sub 

Будьте осторожны с If cell.Value = Me.ComboBox1.Value Then ... ComboBox1 возвращает String, ваш сотовый может содержать цифры и If не может работать (по крайней мере, здесь это это так).

Более обобщенно процедура сканирования весь список, а не полагаться на его возрастающем порядке сортировки (вы можете скоро список с «Яблоко», «банан», «Cherimoya», ...)

Private Sub ComboBox1_Change() 
Dim MyRange As Range, Idx As Integer 

    Set MyRange = [A1]      ' or whereever your list starts 
    Idx = 1 

    Do While MyRange(Idx, 1) <> ""   ' start processing 
     If Str(MyRange(Idx, 1)) = Str(ComboBox1) Then 
      If MyRange(Idx, 2) = "" Then  ' bonus: do a toggle 
       MyRange(Idx, 2) = "Test" 
      Else 
       MyRange(Idx, 2) = "" 
      End If 
      Exit Do       ' or not for full list processing 
     End If 
     Idx = Idx + 1 
    Loop 
End Sub 
Смежные вопросы