【问题标题】:Error 1004 Initializing a UserForm object?错误 1004 初始化用户窗体对象?
【发布时间】:2019-04-26 21:31:39
【问题描述】:

我不明白为什么这行会抛出“错误 1004:应用程序定义或对象定义错误”?有人可以帮忙吗?

对象“CombQTY”是用户表单“MASTER”中的组合框。我正在尝试使用范围“QTY_range”填充此组合框的下拉菜单(大小为一列中的 31 行数字 = 0,1,2,3,..30)。

我已尝试将“用户表单”与“MASTER”交换,反之亦然。

Private Sub Userform_Initialize()

MASTER.CombQTY.List = Worksheets("RANGES").Range("QTY_range").Value

End Sub

我不明白为什么它会抛出那个错误,因为我看不出这段代码有任何问题。请帮忙

【问题讨论】:

  • 提问时请不要大喊大叫。全部大写的文本难以阅读和理解,并且为了引起注意而大喊大叫有点粗鲁。谢谢。
  • 命名范围肯定在那张纸上吗?你的代码对我有用。
  • QTY_Range 的尺寸是多少?
  • 永远不要在表单的代码隐藏中引用表单的默认实例。如果CombQTY 是该用户窗体上的控件,则唯一要使用的正确限定符是Me。否则,您将分配CombQTY 组合框的List 属性在表单的默认实例 上,...可能是也可能不是那个 实例。不合格的Worksheets 暗指ActiveWorkbook 是什么;这里需要一个适当的 Workbook 对象限定符。

标签: excel vba userform


【解决方案1】:

不是直接回答您的问题,而是相对于您正在做的事情(我们看不到QTE_range 地址是什么)。


我倾向于循环并收集一个列表,因此我不必担心命名范围的尺寸(列多于行).. 示例代码(未经测试):

dim i as range, a as range, arr as variant
set a = thisworkbook.names("QTE_range").referstorange
for each i in a
    if arr(ubound(arr)) <> "" then redim preserve arr(ubound(arr)+1)
    arr(ubound(arr)) = i.value
next 
Me.CombQTY.List = arr

注意引用...用户表单是Me,工作簿是thisworkbook,可以是antoher ref,也可以是工作表名称等。

【讨论】:

  • 后记:我还更改了引用您的命名范围的方式,不需要工作表名称(以防您弄错了)...Names().RefersToRange
  • 赞成 - 当arr(ubound(arr)) 包含工作表错误并且该错误值与"" 进行比较时,只需要一些错误处理以避免因类型不匹配而崩溃,但这不在范围内.
  • @MathieuGuindon 非常正确。我认为我可以添加的唯一真正范围内的内容是单行代码:Me.CombQTY.List = ThisWorkbook.Names("QTE_range").RefersToRange.Value
猜你喜欢
  • 1970-01-01
  • 2013-06-01
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多