У меня есть 4 кнопки выбора, и их заголовок настроен на разные ячейки. Однако иногда это значение ячейки не содержит текста, и я хочу скрыть кнопку выбора из пользовательской формы, если это так. Но мой код скрывает кнопки выбора, даже если заголовок содержит текст. Я уверен, что это просто, но я не могу это решить.
Call ifBlank
OptionButton1.Caption = qRange1.Value
OptionButton2.Caption = qRange2.Value
OptionButton3.Caption = qRange3.Value
OptionButton4.Caption = qRange4.Value
Sub ifBlank()
If OptionButton3.Caption = "" Then
OptionButton3.Visible = False
If OptionButton4.Caption = "" Then
OptionButton4.Visible = False
End If
End If
а) Звоните ifBlank
после устанавливая титры, не раньше.
б) можно просто написать
Sub ifBlank()
OptionButton1.Visible = (OptionButton1.Caption <> "")
OptionButton2.Visible = (OptionButton2.Caption <> "")
OptionButton3.Visible = (OptionButton3.Caption <> "")
OptionButton4.Visible = (OptionButton4.Caption <> "")
End If
Вы можете упростить себе задачу, сопоставив кнопки выбора и QRanges в коллекциях. Ваш код будет немного больше при настройке пользовательской формы, но позже код станет проще.
Option Explicit
Private Type State
Buttons As Collection
QRanges As Collection
End Type
Private s As State
Private Sub UserForm_Initialize()
Set s.Buttons = New Collection
With s.Buttons
.Add OptionButton1
.Add OptionButton2
.Add OptionButton3
.Add OptionButton4
End With
Set s.QRanges = New Collection
With s.QRanges
.Add QRange1
.Add QRange2
.Add QRange3
.Add QRange4
End With
'other initialisation code
End Sub
Public Sub UpdateButtonCaptions()
Dim myIndex As Long
For myIndex = 1 To s.Buttons.Count
' the test for an QRange may need to be more rigourous
If s.QRanges(myIndex) = "" Then
s.Buttons(myIndex).Visible = False
Else
s.Buttons(myIndex).Visible = True
s.Buttons(myIndex) = s.QRanges(myIndex).Value
End If
Next
End Sub
Я не являюсь постоянным пользователем excel/form, поэтому вам может понадобиться настроить некоторые из приведенных выше кодов.