【问题标题】:If Cell in Range Matches ComboBox Value Then right Cell Value如果范围内的单元格与组合框值匹配,则正确的单元格值
【发布时间】:2015-02-24 01:29:23
【问题描述】:

我正在尝试通过 Excel 和 VBA 创建一个时间线,将小时 (1-24) 列在 A1:A24 范围内;我创建了一个组合框,用那个范围填充列表,现在我试图链接这两个,所以如果我在组合框中选择某个小时,Excel 将在该特定单元格右侧显示“测试”一个单元格从给定的范围内(例如,如果我在 ComboBox 中选择“8”,则 Excel 将在 B8 中显示“Test”,因为 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

如果有人能帮我解决这个问题,那就太好了!

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    如果列表按 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 可能不起作用(至少这里是这种情况)。

    一个更通用的例程扫描整个列表,而不依赖于其升序排序(您可能很快就会有一个包含“Apple”、“Banana”、“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
    

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      相关资源
      最近更新 更多