【问题标题】:Pass CheckBox-Objects传递复选框对象
【发布时间】:2020-02-17 04:09:21
【问题描述】:

如何将 CheckBox-Objects 正确传递给其他子/函数? 不得不多次通过。用于说明它适用于 案例 1: MsgBox "1) " & ckBox.Name 但不在: 案例2:MsgBox "2) " & ckBox.Name

它从“ControlBox_Click_100”中的 ClickBox 中的 Click-Event 开始。

# 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

【问题讨论】:

  • 当您说“它在案例 1 中有效……但在案例 2 中无效”时,您到底是什么意思。你有错误吗?是不是没有达到你的预期?
  • Private Sub fActCheckBox(chk as Control)
  • 没有用。 CheckBox 等于 Control?

标签: vba checkbox


【解决方案1】:

消息 2 不起作用,因为 ckBox 不是该 Sub 中的有效对象。

看看复选框是如何声明和启动为fActCheckbox中的对象的:

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

fActCheckbox 独立存在 - 没有返回 fColonOnOff 的链接; Call 没有你认为的效果。它所做的只是执行另一个过程。

如果您要将fActCheckbox 变成一个公共职能,那么有些事情是可能的。例如

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

【讨论】:

  • 谢谢,但这不是我要找的。想传回 CheckBox-Object。需要的不仅仅是.Name。自己寻找解决方案。
【解决方案2】:

您可以使用全局变量来处理这样的星座。这有效:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    相关资源
    最近更新 更多