VBA - 选择矩阵顶部

时间:2017-12-22 18:00:55

标签: excel vba excel-vba

我正在使用" worksheet_selectionChange"每当选择某些范围内的单元格时触发宏的事件。

Public Sub Worksheet_SelectionChange(ByVal Target As Range)

    Select Case Target.Cells.Offset(-???,0).Value
        Case "LABEL_1"
            Tenor = "2W"
            Call MyLameMacro()
        Case....
    End Select
End Sub

这些范围看起来像小家伙:

enter image description here

如果用户选择标签下面的任何单元格,我希望VBA查找标签顶部的任何内容。如果我确切地知道Label的行数有多少,那么使用offset会有效,但它不是常数....

还有另外一种方法吗?

谢谢 - KC

1 个答案:

答案 0 :(得分:1)

除了有关布局的更多信息之外......您可以使用格式化来构建自己的搜索算法。如果它必须通过数千行(如果你的数据集那么大,那就找另一种方法),这会慢下来。

您必须将“labelColor”和“notLabel”替换为标签行的背景颜色。这假设上面的图片是准确的,并且突出显示“标签”。要找到要替换它们的值,只需选择有问题的单元格,然后在VBA的即时窗口中键入“debug.print selection.interior.color”。

通过将标签值和原始地址放在蹩脚宏之后的括号中,可以在宏中保留这些值。

我没有测试过这个。为了做到这一点,我将不得不猜测你的工作簿的设置......但是这段代码的近似应该适合你。

Public Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Integer
i = 0
searchLoop:
    If i > 100 Then
        MsgBox ("Infinite loop.  Click OK to stop")
        Exit Sub
    End If
    If Target.Offset([-i], 0).Interior.Color = labelColor Then Call MyLameMacro(Target.Offset([-i], 0), Target.address)
    If Target.Offset([-i], 0).Interior.Color = notLabel Then
        If Target.Offset([-i], 0).Value = "Value" Then Call MyLameMacro(Target.Offset([-i], [-1]).Value, Target.address)
        i = i + 1
        GoTo searchLoop
    End If

End Sub