Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel UserForm中的VBA运行时/自动化错误_Excel_Runtime Error_Userform_Vba - Fatal编程技术网

Excel UserForm中的VBA运行时/自动化错误

Excel UserForm中的VBA运行时/自动化错误,excel,runtime-error,userform,vba,Excel,Runtime Error,Userform,Vba,我试图编写一个动态/条件userform,它根据输入到userform的某些输入字段中的内容更改userform上的控件。我的VBA Excel项目的整个想法是获取两个数据系列,比如x和y,并根据用户查询的功能对它们进行操作。我的userform中导致问题的特定部分是用户可以选择他/她想要为变量x或y选择哪种类型的序列的部分 为了让您尽快了解我的问题,我将excel文件上载到以下链接: 为了简单起见,我隔离了导致问题的代码,删除了所有其他宏,并将userform限制为导致错误的控件。要运行它,请

我试图编写一个动态/条件userform,它根据输入到userform的某些输入字段中的内容更改userform上的控件。我的VBA Excel项目的整个想法是获取两个数据系列,比如x和y,并根据用户查询的功能对它们进行操作。我的userform中导致问题的特定部分是用户可以选择他/她想要为变量x或y选择哪种类型的序列的部分

为了让您尽快了解我的问题,我将excel文件上载到以下链接: 为了简单起见,我隔离了导致问题的代码,删除了所有其他宏,并将userform限制为导致错误的控件。要运行它,请单击位于第一个选项卡左上角的Initialize按钮

初始化时,userform包含6个控件:2个标签、2个组合框和2个框架。上载测试文件的功能受到限制:对于系列独立系列或x系列和从属系列y,当您单击“替换”时,应将多个控件添加到与系列对应的帧中

奇怪的是,对于第一个/独立的系列,这是没有问题的,但是对于第二个/依赖的系列,我得到了

运行时错误“-214741784880010108:自动化错误。对象 已从其客户端断开连接

即使两个实例都调用同一个过程,并且在这两个实例中传递给函数的参数都是有效的。我也在同事的笔记本电脑上尝试了这个代码,但得到了同样的错误

导致错误的过程代码如下所示。该过程只是基于传递给函数的参数将控件添加到某个目标帧。造成碰撞的确切原因是:

Set daFrame = dest.Controls.Add("Forms.Frame.1", name)
更奇怪的是,错误只发生在我们创建帧的情况下。添加所有其他控件,例如列表框、标签等,即使对于第二个系列也不是问题

Public Sub add_control(dest As MSForms.Frame, ht As Integer, wdt As Integer, tp As Integer, lft As Integer, typ As String, _
    name As String, Optional capt As String)

Dim daFrame As MSForms.Frame
Dim daButton As MSForms.OptionButton
Dim daList As MSForms.ListBox
Dim daLabel As MSForms.Label
Dim daBox As MSForms.ComboBox

Select Case typ
    Case "Frame"
        Set daFrame = dest.Controls.Add("Forms.Frame.1", name)
        With daFrame
            .Height = ht
            .Width = wdt
            .Top = tp
            .Left = lft
            .Caption = capt
        End With
    Case "ListBox"
        Set daList = dest.Controls.Add("Forms.Listbox.1", name)
        With daList
            .Height = ht
            .Width = wdt
            .Top = tp
            .Left = lft
        End With
    Case "OptionButton"
        Set daButton = dest.Controls.Add("Forms.OptionButton.1", name)
        With daButton
            .Height = ht
            .Width = wdt
            .Top = tp
            .Left = lft
            .Caption = capt
        End With
    Case "Label"
        Set daLabel = dest.Controls.Add("Forms.Label.1", name)
        With daLabel
            .Height = ht
            .Width = wdt
            .Top = tp
            .Left = lft
            .Caption = capt
        End With
    Case "ComboBox"
        Set daBox = dest.Controls.Add("Forms.ComboBox.1", name)
        With daBox
            .Height = ht
            .Width = wdt
            .Top = tp
            .Left = lft
        End With
End Select

End Sub
伙计们,请帮帮我,我真的很感谢你们的意见。另外,如果有一种方法/编程风格可以防止这种奇怪的行为/错误,请告诉我。当然,我在这个论坛和谷歌上搜索过任何提示,但这个问题似乎是特定于代码的。无论如何,我在网上找不到任何有用的东西


干杯

我还没有真正弄清楚真正的原因是什么,但这不是代码-真正的问题必须在框架中。如果您只需删除它并复制和重命名IndFrame,所有操作都可以正常进行。但你可能已经发现了——我还想告诉你,你在Dependent_change sub中有一个错误。你在上一个ElseIf中使用的是Independent的值,而不是Dependent

    Private Sub Dependent_Change()

    If Dependent.Value = "Replacement" Then
        DepFrame.Caption = "Replacement"
        Call rearrange_frame("Replacement2")
    ElseIf Dependent.Value = "Futures" Then
        DepFrame.Caption = "Futures"
        Call rearrange_frame("Futures2")

here: ElseIf Independent.Value = "Spread" Then

        DepFrame.Caption = "Spread"
        src = 2
    End If

    End Sub