获取Function()结果作为Control

时间:2016-10-25 20:13:17

标签: excel excel-vba userform vba

背景: 我需要一个功能来根据STD名称和分析的文本有效地关联控件。 IG:
a)其他一些输入会抛出变量" mytext"
b)如果ListBox1.Value有" mytext"然后我必须将它与ToggleButton1联系起来
方法
我做了以下 部分 的功能
代码:

Private Function RelateControl_ToggleVsList(ToggleCtrl As Control) As Control
Dim ItemControl As Control
Dim myControl As Object
    For Each ItemControl In Me.Controls
    If TypeName(ItemControl) = "ListBox" Then ' 1. If TypeName(ItemControl) = "Label"
    'text lenghts const 13 for ListBox_TimeXX and 22 for ToggleButton_PriorityXX
    If Mid(ItemControl.Name, 13, 2) = Mid(ToggleCtrl.Name, 22, 2) Then Set RelateControl_ToggleVsList = ItemControl: Exit Function
    End If ' 1. If TypeName(ItemControl) = "Label"
    Next ItemControl
End Function

问题:
设置结果时我得到一个null属性:

Set RelateControl_ToggleVsList = ItemControl 'This is nullSet 

enter image description here

调试过程: enter image description here 问题:
如何通过此功能设置控制?

编辑:
根据请求,我添加整个Debugging以查看它被称为表单的位置
呼叫代码

Private Sub ToggleButtons_Active()
Dim ItemControl As Control
Dim ItemTextBox As Variant
Dim TxtControl As String
    For Each ItemControl In Me.Controls
    If TypeName(ItemControl) = "ToggleButton" Then ' 1. If TypeName(ItemControl) = "ToggleButton"
    TxtControl = CStr(RelateControl_ToggleVsList(ItemControl).Value)
    If InStr(TextBox_Notes.Value, TxtControl) > 0 And TxtControl <> "" Then ItemControl.Value = True
    End If ' 1. If TypeName(ItemControl) = "ToggleButton"
    Next ItemControl
End Sub

enter image description here

2 个答案:

答案 0 :(得分:3)

您的错误发生在您的行上

TxtControl = CStr(RelateControl_ToggleVsList(ItemControl).Value)

因为返回的Control的Value属性当前为Null,无法转换为String。

我建议您将TxtControl更改为Variant类型,然后说

TxtControl = RelateControl_ToggleVsList(ItemControl).Value
If IsNull(TxtControl) Then
    TxtControl = ""
Else
    TxtControl = CStr(TxtControl)
End If

或者您可以定义一个Control对象然后使用它:

Dim MyControl As Control
MyControl = RelateControl_ToggleVsList(ItemControl)
If IsNull(MyControl.Value) Then
    TxtControl = ""
Else
    TxtControl = CStr(MyControl.Value)
End If

答案 1 :(得分:0)

<强> 解决方案:
对象本身正在调用不属于它的属性(按预期)。
ListBox Properties没有显示“价值”作为其文本,真实的东西应该称之为:

TxtControl = CStr(RelateControl_ToggleVsList(ItemControl).List(0))CStr(RelateControl_ToggleVsList(ItemControl).List(0))

<强> 此外:
由于提供的解决方案和调试过程,我甚至可以注意到对象是函数中的Set,它在调试时显示为它的“value”属性。