2015-02-23 84 views
0

我试图通过Excel和VBA创建一个时间线,有小时(1-24)在范围A1:A24中列出;我创建了一个ComboBox,用这个范围填充了列表,现在我试图链接这两个,所以如果我在ComboBox中选择一个小时,Excel将在该特定单元格的右侧显示“测试”一个单元格(例如,如果我在组合框中选择“8”,那么Excel将在B8中显示“测试”,因为A8的值是“8”)如果在范围内的单元格匹配组合框值然后右单元格值

这是我用小知识得到多少关于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可能无法正常工作(至少在这里这是这样)。

一个更广义的常规扫描整个列表,而不是依靠其升序排序顺序(你可能很快就会有一个清单,“苹果”,“香蕉”,“番荔枝”,...)

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 
相关问题