如果目标严格在范围内

时间:2018-03-12 20:22:13

标签: excel vba excel-vba if-statement

我正在开发一个平面文件数据库项目,其中我在A列中有一个审美缺口,并且从B11开始在B列中有一个wingdings复选框(字符“o”,“þ”),定义为< / p>

range(range("b11"),range("b11").end(xldown))

所以我设置它的方式是

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Range(Range("B11"), Range("B11").End(xlDown))) Is Nothing Then
        Application.ScreenUpdating = False
        For Each a In Selection
            If Not a.Rows.Hidden Then
                If IsEmpty(a) = False Then
                    If a.Value = "o" Then
                        a.Value = "þ"
                    Else
                        a.Value = "o"
                    End If
                End If
            End If
        Next a
        Range("D4").Select 'really theres a lot more code everywhere but keeping it simple
    End If
End Sub

摘要:如果选中它,取消选中它,如果未选中,请使用wingding font检查它。

所以现在我的问题是如何更改第一个IF语句,以便它只在目标范围严格在上面给出的范围参数范围内时运行。当前语句是“当选择的任何范围与指定范围交叉时,执行以下操作”

我的目标是有一个IF语句,“只有当所选范围在指定范围内”

提前完成

screenshot

2 个答案:

答案 0 :(得分:0)

  

仅当所选范围在指定范围内时

这是确保目标范围完全在您指定范围内的一种方法,例如B:B

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Union(Target, Me.Range("B:B")).Address = "$B:$B" Then Exit Sub
    MsgBox "In Range!"
End Sub

答案 1 :(得分:0)

所以 - 不是严格要求的,但有一个替代解决方案,您可以检查所选范围的字体,以决定是否处理单元格。

(我也改变了勾选框值以更好地代表匹配对 - “¨”不是“o”)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Font.Name = "Wingdings" Then
        Dim C As Range
        For Each C In Target
            SwitchCell C
        Next C
    End If
End Sub

Private Function SwitchCell(ByVal Target As Range)
    If Target.Count > 1 Then Exit Function
    If Target.Font.Name <> "Wingdings" Or Target.Rows.Hidden = True Then Exit Function

    On Error GoTo ExitFunction
    Application.EnableEvents = False
    Select Case Target
        Case "¨": Target = "þ": Target.Offset(0, -1).Select
        Case "þ": Target = "¨": Target.Offset(0, -1).Select
        Case Default
    End Select

ExitFunction:
    Application.EnableEvents = True
End Function