Ошибка объекта Excel VBA требуется в сценарии VBA, дублируют строки во время счетчика

Я пытаюсь создать сценарий 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 исправил проблему с неработающим скриптом.


person Ignotus    schedule 09.12.2014    source источник
comment
в какой строке происходит ошибка?   -  person Patrick Honorez    schedule 09.12.2014
comment
@iDevlop Я уверен, что это: Do While Cells(rowCounter, "C") Is Not Null. Возможно, OP думает, что Cells() возвращает объект, а не вариант. Наверное, Do While Not isEmpty(Cells(rowCounter, "C")) подойдет   -  person    schedule 09.12.2014
comment
. @ iDevlop: Линия не отображалась. @ vba4all: Это удалило предыдущую ошибку, спасибо, но теперь я получаю окно сообщения, показывающее знак ошибки и значение 400, даже не заголовок окна сообщения. Работа с Excel 2007.   -  person Ignotus    schedule 09.12.2014


Ответы (1)


Чтобы проверить, пуста ли ячейка, вы можете использовать Range(xx) <> "" или cell(x,y)<>""
См. этот ответ SO.

person Patrick Honorez    schedule 09.12.2014
comment
Спасибо, ваше решение устранило ошибку. Пришлось ввести счетчик savePos, чтобы он не запускался в поле 1 в каждом цикле. Спасибо за поддержку! - person Ignotus; 10.12.2014