В настоящее время у меня есть флажок в A17, который я хочу заменить функцией значения M9 0/1. Как мне эффективно это реализовать?
` If Target.Address = "$M$9" Then
If Target.Value > 0 Then
If ActiveSheet.ProtectContents Then
ActiveSheet.Unprotect Password: = "TL1234Kvalitet"
Rows("20:22").EntireRow.Hidden = False
ActiveSheet.Protect Password: = "TL1234Kvalitet"
Else
Rows("20:22").EntireRow.Hidden = False
End If
Else
If ActiveSheet.ProtectContents Then
ActiveSheet.Unprotect Password: = "TL1234Kvalitet"
Rows("20:22").EntireRow.Hidden = True
ActiveSheet.Protect Password: = "TL1234Kvalitet"
Else
Rows("20:22").EntireRow.Hidden = True
End If
End If
End If`
Я пробовал строки как:
Если Target.Address = «Флажок 8», Тогда Если Target.Value = True Тогда и т. д.
Не совсем сработало.. Где точно сказать, на какой флажок нужно ссылаться? И что бы вы сделали, чтобы установленный флажок показывал строки, а снятый флажок скрывал их?
Вам не следует использовать Activesheet
в модуле событий рабочего листа, если только вы действительно не имеете в виду это - если, например, в лист будет внесено изменение с помощью кода, в то время как какой-то другой лист активен, вы получите нежелательные результаты... Используйте Me
вместо ActiveSheet
@FaneDuru Честно говоря, не знал, что их два, но вижу, что использую банкомат первой формы.
Тогда я бы порекомендовал вам использовать элементы управления ActiveX
. Они умеют больше, чем Form
набирают, их легче настроить под себя...
Если вы хотите узнать, установлен ли флажок или нет;
Sub Test()
Dim myCheckBox As Shape
Set myCheckBox = ActiveSheet.Shapes("Check Box 8")
If myCheckBox.OLEFormat.Object.Value = 1 Then
MsgBox "CheckBox is checked"
Else
MsgBox "CheckBox is NOT checked"
End If
End Sub
Примечание. «Флажок 8» НЕ является элементом ActiveX, это «Элемент управления формой», и код предполагает, что «Флажок 8» находится на активной странице. Если нет, используйте соответствующее имя листа.
Вы можете поместить свой собственный код в блок IF-Else в зависимости от «состояния» флажка, установлен он или нет.
Поскольку на мой уточняющий вопрос вы не ответили, я подготовил коды для обоих случаев соответственно:
Вам нужно дважды щелкнуть по нему и вставить следующий код, перезаписывающий событие Click
:
Private Sub CheckBox1_Click() 'of course, you must adapt the real check box name (maybe, CheckBox8_Click)
Dim HdRows As Range
Set HdRows = Me.rows("20:22")
If Me.CheckBox1.Value = True Then
If ActiveSheet.ProtectContents Then
Me.Unprotect Password: = "TL1234Kvalitet"
HdRows.EntireRow.Hidden = False
Me.Protect Password: = "TL1234Kvalitet"
Else
HdRows.EntireRow.Hidden = False
End If
Else
If ActiveSheet.ProtectContents Then
Me.Unprotect Password: = "TL1234Kvalitet"
HdRows.EntireRow.Hidden = True
Me.Protect Password: = "TL1234Kvalitet"
Else
HdRows.EntireRow.Hidden = True
End If
End If
End Sub
Form
(скорее всего, если посмотреть на его имя, содержащее пробелы), вам необходимо использовать следующее решение:а. Скопируйте следующий код в стандартный модуль:
Sub hideRows()
Const myChkb As String = "Check Box 8" 'use here the check box REAL name
If Application.Caller = myChkb Then
Dim ws As Worksheet, chkName As String, chkB As CheckBox, HdRows As Range
chkName = myChkb
Set ws = ActiveSheet: Set HdRows = ws.rows("20:22")
Set chkB = ActiveSheet.CheckBoxes(chkName)
If chkB.Value = 1 Then
If ws.ProtectContents Then
ws.Unprotect Password: = "TL1234Kvalitet"
HdRows.EntireRow.Hidden = False
ws.Protect Password: = "TL1234Kvalitet"
Else
HdRows.EntireRow.Hidden = False
End If
Else
If ActiveSheet.ProtectContents Then
ws.Unprotect Password: = "TL1234Kvalitet"
HdRows.EntireRow.Hidden = True
ws.Protect Password: = "TL1234Kvalitet"
Else
HdRows.EntireRow.Hidden = True
End If
End If
End If
End Sub
б. Щелкните правой кнопкой мыши поле со списком и в контекстном меню выберите Assign Macro...
.
Выберите hideRows
(тот, который скопирован выше) и нажмите OK
.
Теперь вы можете поиграть с проверкой — снятием флажка с соответствующего флажка и увидеть строки, которые должны быть скрыты — видимы.
Пожалуйста, оставьте отзыв после тестирования.
Какой флажок вы используете? Тип
ActiveX
илиForm
?