Следующее верно для всех флажков, которые не являются флажками, на которых вы щелкнули.
If xCheckBox.Name <> Application.ActiveSheet.CheckBoxes(n).Name Then
xCheckBox.Value = Application.ActiveSheet.CheckBoxes(n).Value
End If
Вам необходимо дополнительно проверить, пересекается ли xCheckBox.TopLeftCell
с требуемым диапазоном rng
. Так что это верно только для всех других флажков, которые TopLeftCell
находятся в пределах диапазона:
If xCheckBox.Name <> Application.ActiveSheet.CheckBoxes(n).Name And Not Intersect(xCheckBox.TopLeftCell, rng) Is Nothing Then
xCheckBox.Value = Application.ActiveSheet.CheckBoxes(n).Value
End If
Наконец, ваш код может выглядеть примерно так:
Option Explicit
Public Sub SelectAll_Click()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim MasterChkBox As CheckBox
Set MasterChkBox = ws.CheckBoxes(Application.Caller)
Dim MasterLocation As Range
Set MasterLocation = ws.CheckBoxes(Application.Caller).TopLeftCell
Dim Rng As Range
Set Rng = MasterLocation.Resize(RowSize:=14)
'MsgBox (Rng.Address)
Dim xCheckBox As CheckBox
For Each xCheckBox In ws.CheckBoxes
If xCheckBox.Name <> MasterChkBox.Name And _
Not Intersect(xCheckBox.TopLeftCell, Rng) Is Nothing Then
xCheckBox.Value = MasterChkBox.Value
End If
Next xCheckBox
End Sub
Изображение 1: Если вы отметите главный блок, он выберет только 13 полей под главным блоком.