Здравствуйте. Задача1: чтобы при очередном открытии документа чек-боксы всегда были "выключены", независимо от того в каком состоянии они находились при сохранении и закрытии документа. Задача 2: такая же задача к выпадающим спискам: чтобы при очередном открытии в них выло пусто. Спасибо.
Option Explicit
Private Sub Workbook_Open()
Dim sh As Worksheet, cb As CheckBox, cl As Range
For Each sh In ThisWorkbook.Sheets
For Each cb In sh.CheckBoxes
cb.Value = False
Next
For Each cl In sh.UsedRange.Cells
If HasValidation(cl) Then cl.ClearContents
Next
Next
End Sub
Private Function HasValidation(cl As Range) As Boolean
On Error Resume Next
HasValidation = (cl.Validation.Formula1 <> "")
End Function
написал: В модуль листа ЭтаКнигаКодOption Explicit
Private Sub Workbook_Open() Dim sh As Worksheet, cb As CheckBox, cl As Range For Each sh In ThisWorkbook.Sheets For Each cb In sh.CheckBoxes cb.Value = False Next For Each cl In sh.UsedRange.Cells If HasValidation(cl) Then cl.ClearContents Next Next End Sub
Private Function HasValidation(cl As Range) As Boolean On Error Resume Next HasValidation = (cl.Validation.Formula1 <> "") End Function
Извиняюсь, но совершенно забыл про еще одно условие! Есть 2 группы флажков и один отдельный флажок. Нужно чтобы при нажатии на главный флажок "группа 1" или "группа 2" все флажки в группе включались, при этом флажок 7 должен оставаться "независимым". Спасибо. PS или лучше завести новую тему?
Option Explicit
Sub ChangeGroupItemsCheckBoxesActiveSheet()
ChangeGroupItemsCheckBoxes ActiveSheet
End Sub
Sub ChangeGroupItemsCheckBoxes(sh As Worksheet)
Dim shp As Shape, subshp As Shape, ind As Long, iVal As Long
For Each shp In sh.Shapes
If shp.Type = msoGroup Then
ind = 0
For Each subshp In shp.GroupItems
ind = ind + 1
Debug.Print subshp.Name, sh.CheckBoxes(subshp.Name).Value
If ind = 1 Then
iVal = sh.CheckBoxes(subshp.Name).Value
Else
sh.CheckBoxes(subshp.Name).Value = iVal
End If
Next
End If
Next
End Sub
Чекбоксам "Группа 1" и "Группа 2" назначить макрос ChangeGroupItemsCheckBoxesActiveSheet.
написал: Это в стандартный модуль.КодOption Explicit
Sub ChangeGroupItemsCheckBoxesActiveSheet() ChangeGroupItemsCheckBoxes ActiveSheet End Sub
Sub ChangeGroupItemsCheckBoxes(sh As Worksheet) Dim shp As Shape, subshp As Shape, ind As Long, iVal As Long For Each shp In sh.Shapes If shp.Type = msoGroup Then ind = 0 For Each subshp In shp.GroupItems ind = ind + 1 Debug.Print subshp.Name, sh.CheckBoxes(subshp.Name).Value If ind = 1 Then iVal = sh.CheckBoxes(subshp.Name).Value Else sh.CheckBoxes(subshp.Name).Value = iVal End If Next End If Next End Sub Чекбоксам "Группа 1" и "Группа 2" назначить макрос ChangeGroupItemsCheckBoxesActiveSheet.
Проблема: 1: при повторном открытии документа чек-боксы в группах 1 и 2 остаются "включенными", как перед выходом. Проблема 2: если активирован "главный" чек-бокс в группе, то значение остальных по отдельности в группе почему-то не меняется.
И название для темы предложите(тут, в сообщении) соответствующее Правилам форума. И цитировать не нужно все подряд - исправьте свои предыдущие сообщения. Спасибо П.С. сообщение с файлом скрыто до устранения
Согласие есть продукт при полном непротивлении сторон
Option Explicit
'v2
Sub ChangeGroupItemsCheckBoxesActiveSheet()
ChangeGroupItemsCheckBoxes ActiveSheet, 0
End Sub
Sub ChangeGroupItemsCheckBoxes(sh As Worksheet, defaultVal As Long)
Dim shp As Shape, subshp As Shape, ind As Long, iVal As Long
For Each shp In sh.Shapes
If shp.Type = msoGroup Then
ind = 0
For Each subshp In shp.GroupItems
If defaultVal = 0 Then
ind = ind + 1
If ind = 1 Then
iVal = sh.CheckBoxes(subshp.Name).Value
Else
SetCheckBoxValue sh.CheckBoxes(subshp.Name), iVal
End If
Else
SetCheckBoxValue sh.CheckBoxes(subshp.Name), iVal
End If
Next
End If
Next
End Sub
Sub SetCheckBoxValue(cb As CheckBox, iVal As Long)
If cb.Value <> iVal Then cb.Value = iVal
End Sub
Это в модуль ЭтаКнига
Скрытый текст
Код
Option Explicit
'v2
Private Sub Workbook_Open()
Dim sh As Worksheet, cb As CheckBox, cl As Range
For Each sh In ThisWorkbook.Sheets
For Each cb In sh.CheckBoxes
cb.Value = False
Next
ChangeGroupItemsCheckBoxes sh, -4146
For Each cl In sh.UsedRange.Cells
If HasValidation(cl) Then cl.ClearContents
Next
Next
End Sub
Private Function HasValidation(cl As Range) As Boolean
On Error Resume Next
HasValidation = (cl.Validation.Formula1 <> "")
End Function
Здравствуйте. Небольшое продолжение темы. Условие почти прежнее: 1. чтобы ГРУППЫ чекбоксов 1 и 2 "обнулялись после каждого нового открытия документа, при этом чек №7 сохранял свое состояние. 2. раскрывающиеся СПИСКИ 1 "обнулялись" при каждом новом открытии, а вот СПИСКИ 2 сохраняли выбранные значения. Спасибо.