2016-08-12 84 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