Vba 如何在vbscript中使用来自另一个用户窗体的对象?

Vba 如何在vbscript中使用来自另一个用户窗体的对象?,vba,userform,catia,Vba,Userform,Catia,我正在使用vbscript中的多个用户窗体 我正在一个userform中创建一个对象,并尝试在另一个userform中调用它。 我尝试在两个userforms中将该对象声明为Public,但仍然无法从另一个userform访问该对象 期待你的帮助 提前谢谢 用户表单1: Public Inner_V1 As Object Private Sub Inner_V1_CD_Click() 'Auswahlfenster ausblenden Input_sel

我正在使用vbscript中的多个用户窗体

我正在一个userform中创建一个对象,并尝试在另一个userform中调用它。 我尝试在两个userforms中将该对象声明为Public,但仍然无法从另一个userform访问该对象

期待你的帮助

提前谢谢

用户表单1:

        Public Inner_V1 As Object
        Private Sub Inner_V1_CD_Click()

 'Auswahlfenster ausblenden
  Input_selection2.Hide

'Dim myDoc As Document
Set myDoc = CATIA.ActiveDocument

On Error Resume Next

Set ActivePart = CATIA.ActiveDocument.Part

    If Err.Number <> 0 Then
        On Error GoTo 0
        Box = MsgBox("Das geöffnete Dokument ist kein CATPart!" + Chr(10) + "Das Makro wird beendet", vbExclamation, "Falscher Dateityp")
        Unload Input_selection2
        Exit Sub
    End If

' Selektion definieren und leeren ----
Dim UserSel As Object
Set UserSel = myDoc.Selection
UserSel.Clear
'-------------------------------------

' User wählt die Fläche aus #############################################################################

    ' Auswahl festlegen -------------------
    Dim Was1(0)
    Was1(0) = "HybridShape"
    '--------------------------------------

    Dim Auswahl                                         'Wird für die SelectElement2 Methode benötigt (Auswahl durch User)
    Auswahl = UserSel.SelectElement2(Was1, "Bitte die Fläche auswählen.", False)

    If Auswahl = "Normal" Then
        Set Inner_V1 = UserSel.Item(1).Value
        Inner_V1.Value = Inner_V1.Name
    Else
        Unload Input_selection2
        Exit Sub
    End If

    ' Selektion freigeben -----------------------------------------------------
    UserSel.Clear                           'User-Auswahl löschen

  'Auswahlfenster anzeigen
   Input_selection2.Show

   End Sub

这里,internal_V1是我需要从Userform1使用的对象。

向包含该对象的表单添加属性

例如

UserForm1

Private Sub UserForm_Click()
    Dim uf2 As UserForm2
    Set uf2 = New UserForm2

    uf2.Col.Add Now, "K"

    uf2.Show
End Sub
UserForm2

Private mCol As Collection

Private Sub UserForm_Initialize()
    Set mCol = New Collection
End Sub

Public Property Get Col() As Collection
    Set Col = mCol
End Property

Private Sub UserForm_Activate()
    MsgBox mCol("K")
End Sub

答案很简单,我只需要打电话给Userform1.internal_V1

你是说VBA吗?在什么应用程序中?是的,我用VBA在CATIA中开发宏不确定CATIA,但在Excel VBA(以及通常的VBA)中,类和窗体中没有静态对象。您需要将全局变量放在一个单独的模块中。我也在主模块中将对象变量声明为public。但是我仍然无法访问objectUserForm2只是一个UserForm,如果它是一个承载Microsoft Forms的VBA环境(据推测是这样),那就好了。Alex谢谢你的回复。但是我不能理解你的代码。在Userform1中:我将一个对象声明为“Public object1 as object”,并设置一个值。我无法从Userform2获取它:这里我试图获取object1的值。我的示例使用了一个
集合
,用你的目标代替它。当我给。。。。“Set internal_V11=New Object”我收到一条错误消息“Expected:Identifier”您需要编辑您的问题并添加相关代码
Private mCol As Collection

Private Sub UserForm_Initialize()
    Set mCol = New Collection
End Sub

Public Property Get Col() As Collection
    Set Col = mCol
End Property

Private Sub UserForm_Activate()
    MsgBox mCol("K")
End Sub