检查对象是否在单元格范围内

时间:2019-04-11 11:59:40

标签: excel vba

我正在用Excel构建交互式计算。用户将移动图像并按下计算按钮。如果图像在某个单元格范围内,则范围(“ c2”)应标识对象所在的范围(只有4个区域,它们是年四分之一平方,Q1,Q2,Q3和Q4。Q1在e1内:j14)enter image description here

我已经能够通过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

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

让我们假设我们已经分配了Names quad1 quad2 quad3 quad4 < / em>到单元格:

enter image description here

我们确定哪个单元格与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。