Цикл VBA Microsoft Excel

Private Sub UserForm_Activate()
If ActiveSheet.Range("AK4").Value = 0 Then
    CXBTN1.Value = False
ElseIf ActiveSheet.Range("AK4").Value = "FALSE" Then
    CXBTN1.Value = False
Else
    CXBTN1.Value = True
End If

'CheckBox
If ActiveSheet.Range("AL4").Value = 0 Then
    CXBTN2.Value = False
ElseIf ActiveSheet.Range("AL4").Value = "FALSE" Then
    CXBTN2.Value = False
Else
    CXBTN2.Value = True
End If
End Sub

Есть ли способ пройти через это? Я делаю это вручную. Кажется, я не могу найти цикл для этого.

Что вы подразумеваете под «сделать это вручную»? Разве приведенный выше код не делает то, что должен делать? В любом случае попробуйте использовать UserForm_Initialize вместо UserForm_Activate, но это не будет решением... Вы имеете в виду, что вы показываете форму вручную и вам нужно показать ее с помощью фрагмента кода? Или что? Если он работает и не делает того, что вам нужно, уверены ли вы, что активный лист — это тот, который вам нужен? Вызывает ли это какую-либо ошибку? CXBTN2 — это кнопка? Если нет (я предположил это, глядя на его название), то что это?

FaneDuru 12.08.2024 09:01

Кажется, нет никакой ошибки. но сделать это с 84 отдельными кнопками займет слишком много времени. а кодов слишком много и большая погрешность.

xhamsterIT 12.08.2024 09:52

Тогда я не могу понять ничего, связанного с вашей настоящей проблемой. Пожалуйста, отредактируйте наш вопрос и лучше объясните, чего вы хотите. Вам нужно предоставить логику, основанную на том, что делает код более компактным. Я имею в виду, если таких кнопок 84 и нужно использовать для первой "Ак4", для следующей "АЛ4", для следующей "АМ4", "АН4" и так далее - это то, за чем надо следить и ставить на месте. Тогда что вы пытаетесь сделать с помощью кнопки CXBTN1.Value = True?

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

Ответы 2

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

Так:

celladdrs = Array("AK4", "AL4") 'extend as needed
ctls= Array(CXBTN1, CXBTN2)
for i = 0 to 1
    addr = celladdrs(i)
    ' Use "Set" for object assignment!
    Set control = ctls(i)
    If ActiveSheet.Range(addr).Value = 0 Then
        control.Value = False
    ElseIf ActiveSheet.Range(addr).Value = "FALSE" Then
        control.Value = False
    Else
        control.Value = True
    End If
Next

Это полностью решит проблему!!!!!! ваше здоровье

xhamsterIT 12.08.2024 09:54

Рад помочь :-) Тогда не могли бы вы «принять» мой ответ? Спасибо!

Torben Klein 12.08.2024 09:56

Предположим, что имя всех кнопок, которые необходимо изменить, постоянно увеличивается от 1 до 85, воспользуйтесь следующим способом. Не нужно ничего помещать в массивы. Если вы добавите новую кнопку, будет достаточно изменить максимальное число, подлежащее увеличению (с 85 на 86 и т. д.):

Private Sub UserForm_Activate()
  Dim i As Long, rngMatch As Range
  Const btPref As String = "CXBTN"
  Set rngMatch = Range("AK4")
  For i = 1 To 85 'use here the number of buttons
    If rngMatch.Offset(, i - 1).Value = 0 Or rngMatch.Offset(, i - 1).Value = "FALSE" Then
        Me.Controls(btPref & i).Value = False
    Else
        Me.Controls(btPref & i).Value = True
    End If
  Next i
End Sub

Не проверял, но должно работать так, как вам нужно. Конечно, если именование кнопок против увеличения столбцов соответствует правилу...

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