Excel 选择范围内的形状。奇怪的看似随机的结果?
我正在尝试选择一个范围内的形状,但代码的结果并不是我所期望的。它随机选择的形状比预期的多(不在范围内)Excel 选择范围内的形状。奇怪的看似随机的结果?,excel,excel-2010,vba,Excel,Excel 2010,Vba,我正在尝试选择一个范围内的形状,但代码的结果并不是我所期望的。它随机选择的形状比预期的多(不在范围内) 这种奇怪的行为是由“Selection.Address”引起的 在循环中,当找到第一个形状时,可以将当前选择从范围C3更改为第一个形状 下一次通过循环时,它试图将TopLeftCell的地址与形状对象的地址进行比较(相交):形状对象本身没有地址(其TopLeftCell有地址) 但是你做了很长一段路:你不需要使用intersect。下面的代码按照您的预期工作: Option Explicit
这种奇怪的行为是由“Selection.Address”引起的 在循环中,当找到第一个形状时,可以将当前选择从范围C3更改为第一个形状 下一次通过循环时,它试图将TopLeftCell的地址与形状对象的地址进行比较(相交):形状对象本身没有地址(其TopLeftCell有地址) 但是你做了很长一段路:你不需要使用intersect。下面的代码按照您的预期工作:
Option Explicit
Public Sub ShapeSelection()
Dim Sh As Shape
Dim sRng As Range
With ActiveSheet
Set sRng = Selection
For Each Sh In .Shapes
If Sh.TopLeftCell.Address = sRng.Address Then
Sh.Select
Exit For
End If
Next Sh
End With
End Sub
编辑:我刚刚注意到你前面的问题: 交叉点需要满足该要求,但仍需要保留对选定单元格的引用:
Option Explicit
Public Sub ShapeSelection()
Dim Sh As Shape
Dim sRng As Range
With ActiveSheet
If TypeName(Selection) = "Range" Then
Set sRng = Selection
If sRng.CountLarge = 1 Then
For Each Sh In .Shapes
Sh.Select False
Next Sh
Else
For Each Sh In .Shapes
If Not Application.Intersect(Sh.TopLeftCell, .Range(sRng.Address)) Is Nothing Then
Sh.Select False
End If
Next Sh
End If
End If
End With
End Sub
像这样使用“错误恢复下一步”将隐藏所有错误。把它拿走。谢谢你的提示。事实上,无论谁投了反对票,我都会很感激有机会从我的错误中吸取教训。我不知道是谁投了你的反对票,但我会给你一张赞成票!我想你是对的。。。好的,刚刚确认,你是对的!这是因为我不习惯vba中的形状,我已经有点累了。不保存射程是一个愚蠢的错误。我还在学习,(不是正式的,只是简单地从实践中学习)。在本例中,我刚刚对一张工作表进行了头脑风暴,现在选择多个形状(甚至所有形状)非常有用,而无需逐个选择(使用Ctrl+LClick)。谢谢你的帮助!!!谢谢你的反馈,我很高兴你觉得它很有用!
Option Explicit
Public Sub ShapeSelection()
Dim Sh As Shape
Dim sRng As Range
With ActiveSheet
If TypeName(Selection) = "Range" Then
Set sRng = Selection
If sRng.CountLarge = 1 Then
For Each Sh In .Shapes
Sh.Select False
Next Sh
Else
For Each Sh In .Shapes
If Not Application.Intersect(Sh.TopLeftCell, .Range(sRng.Address)) Is Nothing Then
Sh.Select False
End If
Next Sh
End If
End If
End With
End Sub