Передайте CheckBox-объекты - PullRequest
       4

Передайте CheckBox-объекты

0 голосов
/ 15 февраля 2020

Как мне правильно передать CheckBox-объекты другим подпрограммам / функциям? Пришлось пройти его несколько раз. Для иллюстрации он работал для случая 1: MsgBox "1)" & ckBox.Name, но не в случае: case 2: MsgBox "2)" & ckBox.Name

Он начинается с события Click-из ClickBox в "ControlBox_Click_100".

# Modul_1 ---------------------------------------------------
Sub ControlBox_Click_100()
    Call fColOnOff(bRowSearch, "New", "Old", , True)
End Sub


# Modul_2 ---------------------------------------------------
Sub fColOnOff(ByVal bRow As Byte, Optional ByVal sSuchen1 As String, _
                                  Optional ByVal sSuchen2 As String, _
                                  Optional ByVal sSuchen3 As String, _
                                  Optional ByVal bolSuchen2 As Boolean, _
                                  Optional ByVal bolSuchen3 As Boolean) _

Call fActCheckBox

    MsgBox "2) " & ckBox.Name

...

End Sub


# Modul_2 ---------------------------------------------------
Private Sub fActCheckBox()

Dim ckBox As CheckBox
Set ckBox = ActiveSheet.CheckBoxes(Application.Caller)

    MsgBox "1) " & ckBox.Name

End Sub

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

Созвездия, подобные этому, вы можете обрабатывать с помощью глобальной переменной. Это сработало:

Public ckBox As CheckBox

Function fActCheckBox()
Set ckBox = ActiveSheet.CheckBoxes(Application.Caller) 
    MsgBox "1) " & ckBox.Name
End Function


Sub fSpalteEinAusBlenden(... )
    MsgBox "2) " & ckBox.Name
End Sub
0 голосов
/ 15 февраля 2020

Сообщение 2 не работает, потому что ckBox не является допустимым объектом в этом Sub.

Посмотрите, как флажок объявлен и инициирован как объект в fActCheckbox:

Dim ckBox As CheckBox
Set ckBox = ActiveSheet.CheckBoxes(Application.Caller)

fActCheckbox стоит сам по себе - обратной ссылки на fColonOnOff нет; Call не имеет того эффекта, о котором вы думаете. Все, что он делает, это выполняет другую процедуру.

Если бы вы превратили fActCheckbox в Publi c Функция , тогда что-то было бы возможно. Например

Sub Test
   MsgBox "2 " & fActCheckBox
End Sub

Public Function fActCheckBox() As String
  Dim ckName as String
  Dim ckBox As CheckBox
  Set ckBox = ActiveSheet.CheckBoxes(Application.Caller)

  ckName = ckBox.Name
  MsgBox "1) " & ckName
  fActCheckBox = ckName
End Function
...