我正在用Excel构建交互式计算。用户将移动图像并按下计算按钮。如果图像在某个单元格范围内,则范围(“ c2”)应标识对象所在的范围(只有4个区域,它们是年四分之一平方,Q1,Q2,Q3和Q4。Q1在e1内:j14)
我已经能够通过VBA移动对象,但是我无法检查它在哪个范围内:
ActiveSheet.Shapes("Grupo 24").Top = ActiveSheet.Range("B5").Offset(0, 4).Top
ActiveSheet.Shapes("Grupo 24").Left = ActiveSheet.Range("B5").Offset(3, 4).Left
上方的VBA会将对象移动到单元格(“ E5”)右侧的位置(上方的图像),但是我无法检查该图像是否位于(“ E1:J14”)内。
当我尝试检查时,作为测试,我收到错误消息:错误13不兼容的类型:
If ActiveSheet.Shapes("Grupo 24").Top = ActiveSheet.Range("e1:j14") Then
MsgBox ("Within")
Else
MsgBox ("Outside")
End If
有什么想法吗?
答案 0 :(得分:2)
让我们假设我们已经分配了Names
quad1 , quad2 , quad3 和 quad4 < / em>到单元格:
我们确定哪个单元格与Shape
关联,然后循环浏览这些块以查找该单元格所在的块:
Sub quadFinder()
Dim s As Shape, r As Range, i As Long
Set s = ActiveSheet.Shapes("Grupo 24")
Set r = s.TopLeftCell
For i = 1 To 4
If Not Intersect(r, Range("quad" & i)) Is Nothing Then
MsgBox quad & i
Exit Sub
End If
Next i
MsgBox "not in a quad"
End Sub
答案 1 :(得分:1)
在下面,您可以看到一个可以做的事的例子:
Dim horizontalAxis As Boolean
Dim verticalAxis As Boolean
Dim sht As Worksheet
Dim testRng As Range
Set sht = ThisWorkbook.Worksheets("Sheet3")
Set testRng = sht.Range("N1:S22")
horizontalAxis = sht.Shapes("Rectangle 1").Left >= testRng.Left And sht.Shapes("Rectangle 1").Left + sht.Shapes("Rectangle 1").Width <= testRng.Left + testRng.Width
Debug.Print horizontalAxis
verticalAxis = sht.Shapes("Rectangle 1").Top + sht.Shapes("Rectangle 1").Height <= testRng.Height
Debug.Print verticalAxis
Debug.Print horizontalAxis And verticalAxis
出于演示目的,我使用矩形和随机范围。
上面的代码检查形状是否严格在范围内。与相邻范围的最小重叠将返回false。