获取 Function() 结果作为控件
Get Function() result as Control
背景:
我需要一个函数来根据 STD 名称和分析的文本有效地关联控件。搞笑:
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
调试过程:
问题:
如何设置控件作为此函数的结果?
编辑:
根据请求,我添加了整个调试,以便查看它在何处被调用
调用代码
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
你的错误发生在你的行上,上面写着
TxtControl = CStr(RelateControl_ToggleVsList(ItemControl).Value)
因为返回的控件的 Value
属性 当前是 Null
,无法转换为字符串。
我建议你把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
解法:
对象本身正在调用不属于它的 属性(如预期的那样)。
ListBox Properties 没有显示 "Value" 作为它的文字,真实的东西应该这样称呼它:
TxtControl = CStr(RelateControl_ToggleVsList(ItemControl).List(0))CStr(RelateControl_ToggleVsList(ItemControl).List(0))
此外:
感谢提供的解决方案和调试过程,我什至注意到函数中的对象是Set,调试时显示为它的"value" 属性
背景:
我需要一个函数来根据 STD 名称和分析的文本有效地关联控件。搞笑:
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
调试过程:
如何设置控件作为此函数的结果?
编辑:
根据请求,我添加了整个调试,以便查看它在何处被调用
调用代码
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
你的错误发生在你的行上,上面写着
TxtControl = CStr(RelateControl_ToggleVsList(ItemControl).Value)
因为返回的控件的 Value
属性 当前是 Null
,无法转换为字符串。
我建议你把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
解法:
对象本身正在调用不属于它的 属性(如预期的那样)。
ListBox Properties 没有显示 "Value" 作为它的文字,真实的东西应该这样称呼它:
TxtControl = CStr(RelateControl_ToggleVsList(ItemControl).List(0))CStr(RelateControl_ToggleVsList(ItemControl).List(0))
此外:
感谢提供的解决方案和调试过程,我什至注意到函数中的对象是Set,调试时显示为它的"value" 属性