Включение флажка в строки кода, а не в значение ячейки

В настоящее время у меня есть флажок в 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 Тогда и т. д.

Не совсем сработало.. Где точно сказать, на какой флажок нужно ссылаться? И что бы вы сделали, чтобы установленный флажок показывал строки, а снятый флажок скрывал их?

Какой флажок вы используете? Тип ActiveX или Form?

FaneDuru 12.08.2024 13:05

Вам не следует использовать Activesheet в модуле событий рабочего листа, если только вы действительно не имеете в виду это - если, например, в лист будет внесено изменение с помощью кода, в то время как какой-то другой лист активен, вы получите нежелательные результаты... Используйте Me вместо ActiveSheet

Tim Williams 12.08.2024 20:41

@FaneDuru Честно говоря, не знал, что их два, но вижу, что использую банкомат первой формы.

jonathan Jonfan brandstrup 13.08.2024 06:34

Тогда я бы порекомендовал вам использовать элементы управления ActiveX. Они умеют больше, чем Form набирают, их легче настроить под себя...

FaneDuru 13.08.2024 09:54
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
4
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы хотите узнать, установлен ли флажок или нет;

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 в зависимости от «состояния» флажка, установлен он или нет.

Ответ принят как подходящий

Поскольку на мой уточняющий вопрос вы не ответили, я подготовил коды для обоих случаев соответственно:

  1. Случай со списком ActiveX, самый простой:

Вам нужно дважды щелкнуть по нему и вставить следующий код, перезаписывающий событие 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
  1. Если используемый флажок имеет тип 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.

Теперь вы можете поиграть с проверкой — снятием флажка с соответствующего флажка и увидеть строки, которые должны быть скрыты — видимы.

Пожалуйста, оставьте отзыв после тестирования.

Другие вопросы по теме