Я пытаюсь создать сценарий VBA в документе Excel, который перебирает каждую строку в течение определенного времени (столбец 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
Exit Sub 'показать msgbox при ошибке Errorcatch: MsgBox Err.Number & ":" & Err.Description End Sub `
Кажется, это сработало, пришлось встроить savePos, чтобы он запомнил строку, в которой находится. Ответ iDevlop исправил проблему с неработающим скриптом.
Do While Cells(rowCounter, "C") Is Not Null
. Возможно, OP думает, чтоCells()
возвращает объект, а не вариант. Наверное,Do While Not isEmpty(Cells(rowCounter, "C"))
подойдет - person   schedule 09.12.2014