【发布时间】:2018-03-27 03:53:30
【问题描述】:
我有一个 userForm (mappingGuide),它允许用户从一个对用户更友好的名称列表中选择一个 smartyTag。
我有第二个用户表单 (conditionalBuilder),我想在双击文本字段时调用这个用户表单,以便用户可以查找要应用的 smartyTag(如果他们不不知道)。
所以逻辑是:
- 打开条件生成器
- 双击字段文本框
- mappingGuide 打开
- 从列表框中选择一个智能标签
- 将 smartytag 值填充到 conditionalBuilder 的字段文本框中
- 卸载映射指南
我认为我在完成要求时遇到的问题是,当我自己加载表单时,我找不到设置已加载 instance 的 conditionalBuilder 的 fieldName 文本框文本的方法(请参阅最后下面的代码块)。我一直在寻找,但无法弄清楚。
相关代码如下:
conditionalBuilder 从自定义 UI 功能区加载
Sub RunCode(ByVal Control As IRibbonControl)
Select Case Control.ID
Case Is = "mapper": LoadMappingGuide
Case Is = "conditional": LoadConditionalBuilder
End Select
End Sub
Sub LoadConditionalBuilder()
Dim conditionalForm As New conditionalBuilder
conditionalForm.Show False
End Sub
双击fieldName的事件然后加载mappingGuide
Private Sub fieldName_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Me.hide
Dim pickField As New mappingGuide
pickField.Show False
End Sub
smartTag 列表框点击事件然后尝试将选择放入 fieldName(或者如果未加载表单则选择)
Private Sub smartTagList_Click()
If smartTagList.ListIndex > -1 And smartTagList.Selected(smartTagList.ListIndex) Then
Dim smartyTag As String
smartyTag = smartTagList.List(smartTagList.ListIndex, 2)
If isUserFormLoaded(conditionalBuilder.Name) Then
'*** ---> below is my issue how to reference instance of form
conditionalBuilder.fieldName.Text = smartyTag
conditionalBuilder.Show
Else
Selection.Range.Text = smartyTag
End If
End If
Unload Me
End Sub
如果有更好的设置也很高兴知道。我将表单分开,因为用户可以使用几个级别创建标签。
【问题讨论】:
-
更好的方法是在表单上使用属性。
-
你试过了吗:
UserForms("TheNameOfUserForm")? -
@cyboashu - 您能否详细说明或在答案中绘制出来或提供链接以获取更多信息?
-
@MaciejLos - 是的。没用。
-
@CallumDA,你是对的,这就是为什么我赞成你和 [cyboashu] 的答案。这只是另一个想法。 ;)