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) <> ""
或cell(x,y)<>""
见this SO answer。
【讨论】:
谢谢,您的解决方案修复了错误。必须放入一个 savePos 计数器,使其不会在每个循环的字段 1 中开始。感谢您的支持!以上是关于VBA脚本上的Excel VBA对象需要错误在计数器时重复行的主要内容,如果未能解决你的问题,请参考以下文章