我正在开发一个平面文件数据库项目,其中我在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语句,“只有当所选范围在指定范围内”
时提前完成
答案 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