VBA脚本上的Excel VBA对象需要错误在计数器时重复行

Posted

技术标签:

【中文标题】VBA脚本上的Excel VBA对象需要错误在计数器时重复行【英文标题】:Excel VBA Object required error on VBA Script do duplicate lines while counter 【发布时间】:2015-02-07 07:44:34 【问题描述】:

我正在尝试在 Excel 文档中创建一个 VBA 脚本,该脚本循环遍历每一行一段时间(第 3 列),并将每一行写入 E、F 和 G 列,看起来与该行完全相同在原始输入中执行。最后用下面的例子给出了总共1050行。

输入如下所示,在单元格 A、B 和 C 中,其中第 1 列是 CompanyName,第 2 列是 CompanyNumber,第 3 列是金额。

CompanyName1 9910483 300 CompanyName2 9910477 250 CompanyName3 9910620 500

结果:

CompanyName1 9910483 300 CompanyName1 9910483 300 CompanyName1 9910483 300 CompanyName1 9910483 300 CompanyName1 9910483 300 CompanyName1 9910483 300 etc to 300 lines, then next line item for amount times

我制作的 VBA 代码如下所示:

Sub DoWhileItemsAndAmount()

    Dim counter As Integer
    Dim rowCounter As Integer
    Dim column1 As String
    Dim column2 As String
    Dim column3 As Integer

    counter = 1
    rowCounter = 1


    Do While Cells(rowCounter, "C") Is Not Null

        column1 = Cells(rowCounter, "A").Value
        column2 = Cells(rowCounter, "B").Value
        column3 = Cells(rowCounter, "C").Value

        Do While counter < column3
            Cells(counter, "E").Value = column1
            Cells(counter, "F").Value = column2
            Cells(counter, "G").Value = column3
            counter = counter + 1
        Loop

        rowCounter = rowCounter + 1
    Loop
End Sub

这会导致运行宏时出现“需要对象”错误。没有什么比错误代码等其他的了。我喜欢相信脚本的方向是正确的。

我知道这听起来不合逻辑,但我们使用的程序期望这个输出作为输入。

非常感谢。

编辑:我将代码更改为这个,现在它可以工作了

`Sub DoWhileItemsAndAmount()

' Declare vars
Dim counter As Integer
Dim rowTeller As Integer
Dim savePos As Integer
Dim column1 As String
Dim column2 As String
Dim column3 As Integer

' Set vars
counter = 0
savePos = 1
rowCounter = 1

' set errorcatch
On Error GoTo Errorcatch

' do while cell C is Not Empty
Do While ActiveWorkbook.Sheets("Blad1").Cells(rowCounter, "C").Value <> ""
    column1 = ActiveWorkbook.Sheets("Blad1").Cells(rowCounter, "A").Value
    column2 = ActiveWorkbook.Sheets("Blad1").Cells(rowCounter, "B").Value
    column3 = ActiveWorkbook.Sheets("Blad1").Cells(rowCounter, "C").Value
    counter = 0
    ' do while teller smaller then value in field
    Do While counter < column3

        ' add values to other fields incremental
        ActiveWorkbook.Sheets("Blad1").Cells(savePos, "E").Value = column1
        ActiveWorkbook.Sheets("Blad1").Cells(savePos, "F").Value = column2
        ActiveWorkbook.Sheets("Blad1").Cells(savePos, "G").Value = column3
        counter = counter + 1
        savePos = savePos + 1
    Loop
    rowCounter = rowCounter + 1
Loop

退出子 ' 出错时显示消息框 错误捕获: MsgBox Err.Number & ": " & Err.Description 结束子 `

这似乎可行,必须建立一个 savePos 让它记住它所在的行。 iDevlop的回答修复了脚本不运行的问题。

【问题讨论】:

错误发生在哪一行? @iDevlop 我确定是:Do While Cells(rowCounter, "C") Is Not Null。可能 OP 认为 Cells() 返回一个 Object 而不是 Variant。可能Do While Not isEmpty(Cells(rowCounter, "C")) 会做 .@iDevlop:该行未显示。 @vba4all:这消除了以前的错误,谢谢,但是现在我得到一个显示错误符号和值 400 的消息框,甚至没有消息框标题。使用 Excel 2007。 【参考方案1】:

要测试单元格是否为空,可以使用Range(xx) &lt;&gt; ""cell(x,y)&lt;&gt;"" 见this SO answer。

【讨论】:

谢谢,您的解决方案修复了错误。必须放入一个 savePos 计数器,使其不会在每个循环的字段 1 中开始。感谢您的支持!

以上是关于VBA脚本上的Excel VBA对象需要错误在计数器时重复行的主要内容,如果未能解决你的问题,请参考以下文章

vba excel计数

Excel中的VBA - 如果语句计数器不起作用

Excel VBA:运行时错误 424,需要对象

唯一计数(Excel VBA 与公式)更快的方法

VBA - 从 Excel 更新 Access 文件的链接表

删除行时需要 Excel VBA 运行时错误“424”对象