我正在使用" 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
这些范围看起来像小家伙:
如果用户选择标签下面的任何单元格,我希望VBA查找标签顶部的任何内容。如果我确切地知道Label的行数有多少,那么使用offset会有效,但它不是常数....
还有另外一种方法吗?
谢谢 - KC
答案 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