【问题标题】:Run-time error 424: Object Required. What object am I missing?运行时错误 424:需要对象。我错过了什么?
【发布时间】:2019-02-04 15:49:23
【问题描述】:

尝试学习 excel vba 来帮助我完成工作。我正在创建一个动态零件清单列表。由于各种原因(包括数量不同),我可能在我的库存中多次列出相同的零件编号,在不同的行上。我想在另一张表上汇总每个零件的数量,提供“统计”表以快速查看库存。

话虽如此,不同的零件编号将不断流入和流出库存。我正在尝试对统计页面进行编码,以仅显示库存和总和中的零件号,而不是所有零件号和一堆零。

到目前为止,我只尝试初始化统计表上的零件编号列表。完成后,我将开始对数量求和。前两行是文本、标题和标题。

Private Sub RefreshStatsButton_Click()

Dim FirstRowInventory As Integer
Dim LastRowInventory As Integer
Dim FirstRowStats As Integer    
Dim PartNoIndexCount As Integer    
Dim PartNoCol As Integer    



FirstRowInventory = 3    
FirstRowStats = 3    
PartNoIndexCount = 3    
PartNoCol = 1    

LastRowInventory = Worksheets("Inventory").UsedRange.Rows.Count    

For i = FirstRowInventory To LastRowInventory    
    If Worksheets("Inventory").Cells(i, PartNoCol).Value <> Worksheets("Inventory").Cells(PartNoIndexCount - 1, PartNoCol).Value Then    
        Worksheets("Inventory").Cells(i, PartNoCol).Value.Copy 
Destination:=Worksheets("Stats").Cells(PartNoIndexCount, PartNoCol)    
        'MsgBox ("InventoryCell: " & Worksheets("Inventory").Cells(i, PartNoCol).Value & " StatsCell: " & Worksheets("Stats").Cells(PartNoIndexCount, PartNoCol))
        PartNoIndexCount = PartNoIndexCount + 1    
        Else:    
    End If    
Next    


End Sub

我希望在不重复的情况下获得库存表中每个零件编号的列表。我明白了

需要运行时错误 424 对象。

然后我尝试添加一个消息框来帮助调试(已注释掉),但没有得到任何结果。感谢您的帮助!

【问题讨论】:

  • 我刚刚意识到,在我的 if 语句比较中,比较的右侧应该是 Worksheets("Stats"),但仍然没有解决我的问题。
  • 我将部件号格式化为文本以保留前导零。我尝试将所有内容的 .Value 更改为 .Text ,但没有成功。
  • .Text 也是范围的属性,因此错误应该是相同的。 .Copy 需要范围对象本身才能运行。
  • 尝试使用 .Value2 没有成功。
  • @Vityata 我可以使用范围对象访问单个单元格吗?

标签: excel vba loops object


【解决方案1】:

问题是代码试图复制范围的.Value 属性。这不是 VBA 的工作方式。例如,它正在尝试:

Worksheets("Inventory").Cells(i, PartNoCol).Value.Copy 

Value 使其抛出错误。尝试不使用它,录制宏并查看它如何生成用于复制和粘贴的代码。或者试试这个最小的工作代码并调整你的代码:

Sub TestMe()

    With Worksheets(1)
        .Range(.Cells(1, 1), .Cells(5, 5)).Copy
        .Range("A10").PasteSpecial Paste:=xlPasteValues
    End With
    Application.CutCopyMode = False

End Sub

【讨论】:

  • 感谢您的帮助。我录制了一个宏并查看了它。我将以前 .Cells(i, 1).Value 的所有内容更改为 .Range("A" &amp; i).Value,但仍然遇到问题。
  • 那是因为Value 属性没有Copy 方法。 RangeCells 对象具有 Copy 方法。
  • 哦!我现在知道了。它没有点击。我让它工作!谢谢!!
猜你喜欢
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多