2010-04-07 5 views
0

Я пытаюсь создать список, который добавляет новую строку данных каждый раз, когда нажимается кнопка. У меня есть следующий код, назначенный на кнопку при нажатии:Заполните новую строку нажатием кнопки VBA

PurchaseDate = InputBox("Enter Purchase Date:") 
    Sheets("TrackRecord").Select 
    i = 0 
    Row = i + 1 
    Range("A2").Select 
    ActiveCell.FormulaR1C1 = Row 
    Range("B2").Select 
    ActiveCell.FormulaR1C1 = "=Dashboard!R26C4*(1/Dashboard!R26C12)" 
    Range("C2").Select 
    ActiveCell.FormulaR1C1 = "=Dashboard!R26C2" 
    Range("D2").Select 
    ActiveCell.FormulaR1C1 = PurchaseDate 
    Range("E2").Select 
    ActiveCell.FormulaR1C1 = "=Dashboard!R26C8 + R2C4" 
    Range("F2").Select 
    ActiveCell.FormulaR1C1 = "=Waterfall!R[8]C[5]" 
    Range("F2").Select 
    Selection.AutoFill Destination:=Range("F2:I2"), Type:=xlFillDefault 
    Range("F2:I2").Select 
End Sub 

Этот код работает отлично, но я хотел бы его заполнить следующую строку ниже вместо перезаписи той же строке, каждый раз, когда нажата кнопка. Я знаю, что мне нужно итерации через раздел «Range (« A2 »). Select», например. «Range (« A2 »). Выберите« -> »Range (« B2 »). Выберите« .. Но я не знаю, как это сделать в VBA для Excel. Вот почему я спрашиваю вас, ребята;).

Спасибо,

ответ

1

Если вы хотите, чтобы сохраняться в следующую строку, даже если вы закроете первенствовать и открыть его снова, то лучше найти в последней строке каждый раз.

Dim Row As Long 

    Row = GetNextRow(Sheets("TrackRecord"), "A") 

    PurchaseDate = InputBox("Enter Purchase Date:") 

    Sheets("TrackRecord").Select 

    Range("A" & Row).Select 
    ActiveCell.FormulaR1C1 = Row 
    Range("B" & Row).Select 
    ActiveCell.FormulaR1C1 = "=Dashboard!R26C4*(1/Dashboard!R26C12)" 
    Range("C" & Row).Select 
    ActiveCell.FormulaR1C1 = "=Dashboard!R26C2" 
    Range("D" & Row).Select 
    ActiveCell.FormulaR1C1 = PurchaseDate 
    Range("E" & Row).Select 
    ActiveCell.FormulaR1C1 = "=Dashboard!R26C8 + R2C4" 
    Range("F" & Row).Select 
    ActiveCell.FormulaR1C1 = "=Waterfall!R[8]C[5]" 
    Range("F" & Row).Select 
    Selection.AutoFill Destination:=Range("F" & Row & ":I" & Row), Type:=xlFillDefault 
    Range("F" & Row & ":I" & Row).Select 
End Sub 


Private Function GetNextRow(sheet As Worksheet, column As String) As Long 

    'Look for the first empty row in the specified column 

    Dim Row As Long 

    For Row = 1 To 65535 
     If sheet.Range(column & Row).Formula = "" Then 
      GetNextRow = Row 
      Exit For 
     End If 
    Next Row 

End Function 
+0

Это то, что я тоже думал, но этот код не решает мою проблему (он многократно пишет по той же строке). Я думаю, что мне нужна переменная «Строка», чтобы она была постоянной, так что номер строки сохраняется после нажатия кнопки. Как бы то ни было, переменная «i» инициализируется до 0 при запуске этого кода. Я не уверен, как сделать переменную «Row» устойчивой. Есть идеи? Благодарю. – AME

+0

Ах! Здесь: теперь это всегда добавляется к концу листа, просматривая столбец A и возвращая следующую пустую строку. –

+0

Спасибо, что работает отлично! – AME

Смежные вопросы