簡體   English   中英

UserForm中的VBA運行時/自動化錯誤

[英]VBA Runtime/automation error in UserForm

我正在嘗試編寫一個動態/有條件的用戶窗體,該窗體根據在用戶窗體的某些輸入字段中輸入的內容來更改用戶窗體上的控件。 我的VBA Excel項目的整體思路是采用2個數據系列(例如x和y)並根據用戶查詢的功能對其進行操作。 導致問題的用戶表單的特定部分是用戶可以選擇要為其選擇變量(x或y)的系列類型的那部分。

為了讓您盡快理解我的問題,我將excel文件上傳到以下鏈接: http : //www26.zippyshare.com/v/51719800/file.html為了簡化起見,我隔離了導致代碼的問題,刪除所有其他宏,並將用戶窗體限制為導致錯誤的控件。 要運行它,請單擊第一個選項卡左上角的“初始化”按鈕。

初始化后,用戶窗體包含6個控件:2個標簽,2個組合框和2個框架。 上傳的測試文件的功能是有限的:對於系列(獨立系列(或x)和從屬系列(y)),當您單擊“替換”時,應將多個控件添加到與該系列相對應的框架中。

奇怪的是,這對於第一個(/獨立的)系列是沒有問題的,但是對於第二個(/獨立的)系列,我得到了

運行時錯誤'-2147417848(80010108):自動化錯誤。 調用的對象已與其客戶端斷開連接。

即使兩個實例都調用完全相同的過程,並且在兩個實例中傳遞給函數的參數都是有效的。 我也在同事的筆記本電腦上嘗試過該代碼,但得到了相同的錯誤。

導致錯誤的過程代碼如下。 該過程僅基於傳遞給函數的參數將控件添加到某個目標框架。 導致崩潰的確切行是:

Set daFrame = dest.Controls.Add("Forms.Frame.1", name)

同樣奇怪的是,該錯誤僅在我們創建框架的情況下發生。 添加所有其他控件(例如,ListBoxes,Label等)(即使是第二個系列)也不成問題。

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

請幫助我,我非常感謝您的投入。 另外,如果有一種方法/編程風格可以防止這種怪異的行為/錯誤,請告訴我。 當然,我在這個論壇和google上搜索了任何提示,但是似乎這個問題是特定於代碼的。 無論如何,我在網絡上找不到任何有用的東西。

干杯

我還沒有真正找出真正的原因是什么,但這不是代碼-真正的問題必須在DepFrame中。 如果您只是將其刪除並復制並重命名IndFrame,則一切正常。 但是您可能已經知道了-我也想告訴您Dependent_change子目錄中有一個錯誤。 您在最后一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM