Excel 将ListObject列添加到Userform组合框列表时出错

Excel 将ListObject列添加到Userform组合框列表时出错,excel,vba,combobox,userform,populate,Excel,Vba,Combobox,Userform,Populate,我有一个名为UFCustInfo的用户表单。在工作表区域,我有一个宏来显示表单- Private Sub CmdShowInputForm() UFCustInfo.Show End Sub 这将分配给工作表上的按钮(表单控件) 在userform区域中,我还有一个初始化例程来填充userform上的组合框- Private Sub UserForm_Initialize() Me.CBCustName.List = ActiveSheet.ListObject("Cust

我有一个名为UFCustInfo的用户表单。在工作表区域,我有一个宏来显示表单-

Private Sub CmdShowInputForm()
    UFCustInfo.Show
End Sub
这将分配给工作表上的按钮(表单控件)

在userform区域中,我还有一个初始化例程来填充userform上的组合框-

Private Sub UserForm_Initialize()
      Me.CBCustName.List = ActiveSheet.ListObject("CustInfo").ListColumns(1).DataBodyRange.Value
End Sub
单击命令按钮显示表单时,出现运行时错误“438”:对象不支持此属性或方法,调试将突出显示“UFCustInfo.Show”行

如果我禁用(注释)初始化行,表单将加载,但是(当然)组合框不会填充


我还有代码来添加新的、清除的表单和关闭的表单,只要我不运行初始化代码,它们都可以正常运行。我遗漏了什么?

根据您提供的有关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

什么是“客户信息”?你的用户表单的名称是什么?UFCustInfo是我给用户表单的名称。CustInfo是表的名称以及表所在的工作表的名称。所以我认为ActiveSheet.ListObject(“CustInfo”)指的是这个表,您没有给出太多的支持信息。我怀疑这就是您试图用“表”填充列表的地方,但是您的“表”是什么?是rangename引用还是真正的表对象?有多少行/列?谢谢Dbitch花时间回复…我会尝试一下,让你知道结果。嗨,Dbitch。我添加了“Dim I As Long”,这样就行了。我见过我以前尝试过的构造作为填充组合框的解决方案,但我不知道为什么它在这种情况下不起作用。我需要了解更多关于For/Next循环的信息,尤其是:对于tbl.DataBodyRange.Rows.Count的I=1。看起来我们正在将表中的行数分配给i。然后我们将每一行(从第一列开始)的值添加到CBCustName。我想我从来没有见过COL_NUM。无论如何,我非常感谢你抽出时间来帮助我!哈刚刚注意到你在哪里声明了COL_NUM.Sure-我可以用更多的信息更新这个答案,但看起来你已经完全弄明白了。如果我的答案有用的话,请随意投票,如果它有用的话,甚至可以把它标记为一个答案。非常好的答案和解释。再次感谢您,现在我将根据用户选择的客户名称(地址、城市、州、邮政编码等)填充其他控件。谢谢-享受您的编码!