2016-08-12 77 views
2

我有一個名爲UFCustInfo的用戶窗體。在工作表區域,我有一個宏以顯示形式 - 在工作表上將ListObject列添加到Userform組合框時出錯列表

Private Sub CmdShowInputForm() 
    UFCustInfo.Show 
End Sub 

此被分配給按鈕(表單控件)。

在窗體區域,我也有一個初始化程序來填充用戶窗體組合框 -

Private Sub UserForm_Initialize() 
     Me.CBCustName.List = ActiveSheet.ListObject("CustInfo").ListColumns(1).DataBodyRange.Value 
End Sub 

當我單擊命令按鈕顯示窗體,我得到運行時錯誤「438」:對象不支持此屬性或方法,並且調試將突出顯示「UFCustInfo.Show」行。

如果我禁用(註釋)Initialize行,表單將加載,但(當然)組合框不填充。

我也有代碼來添加新的,清晰的窗體,並關閉窗體,只要我不運行初始化代碼,所有運行良好。我錯過了什麼?

+0

什麼是「CustInfo」?什麼是您的UserForm的名稱? – dbmitch

+0

UFCustInfo是我給UserForm的名稱。 CustInfo是表格的名稱和表格所在工作表的名稱。所以我認爲ActiveSheet.ListObject(「CustInfo」)引用表。 – gyster

+0

你不會提供太多的支持信息。我懷疑這是你試圖用'table'填充列表的地方,但是whaty是你的'table' - 是範圍名稱引用還是真正的表格對象?多少行/列? – dbmitch

回答

0

從我們提供的有關您的listobject的有限信息中,我認爲這個修補程序可能適用於您。我認爲ListObject是一種類型,ListObjects(複數)是您嘗試訪問的集合。

' *Add this to top of your module to identify future syntax errors before running *' 

Option Explicit 

Private Sub UserForm_Initialize() 
    Const COL_NUM as Integer = 1 ' Which column you want to access ' 

    Dim ws As Worksheet 
    Dim i As Long 
    Dim tbl As ListObject 

    Set ws = ActiveSheet 

    Set tbl = ws.ListObjects("CustInfo") 

    CBCustName.Clear 

    With tbl 
     ' Add cell values one at a time to the Combo Box List 
     For i = 1 To tbl.DataBodyRange.Rows.Count 
      CBCustName.AddItem tbl.DataBodyRange.Cells(i, COL_NUM) 
     Next 
    End With 

End Sub 
+0

謝謝dbmitch抽出時間回覆......我會給你一個提示,讓你知道它是如何運作的。 – gyster

+0

嗨dbmitch。我添加了「Dim i As Long」,這個工程。我已經看到了我之前嘗試的構造方法來填充組合框,但我不知道爲什麼它在這種情況下無法使用。我需要更多地瞭解For/Next循環,具體如下:For i = 1 To tbl.DataBodyRange.Rows.Count。看來我們將表中的行數分配給i。然後我們將每行的值(從第一列)添加到CBCustName。我不認爲我曾經見過COL_NUM。無論如何,我非常感謝您花時間幫助!哈!剛注意到你聲明COL_NUM的地方。 – gyster

+0

當然 - 我可以用更多的信息更新這個答案,但看起來你已經明白了。如果它有用,請隨時提出我的答案,或者如果它做了工作,則將其標記爲答案 – dbmitch