2010-04-07 8 views
0

J'essaye de créer une liste qui ajoute une nouvelle rangée de données chaque fois qu'un bouton est cliqué. J'ai le code suivant attribué au bouton lorsque vous cliquez dessus:Remplir une nouvelle ligne avec le bouton VBA cliquez sur

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 

Ce code fonctionne très bien, mais je l'aime remplir la ligne suivante ci-dessous au lieu d'écraser la même ligne chaque fois que le bouton est cliqué. Je sais que je dois parcourir la section "Range (" A2 "), sélectionnez" section, par ex. "Range (" A2 "). Sélectionnez" -> "Range (" B2 "). Sélectionnez" .. Mais je ne sais pas comment le faire dans VBA pour Excel. C'est pourquoi je vous demande des amis.).

Merci,

Répondre

1

Si vous voulez persister la ligne suivante, même lorsque vous fermez Excel et ouvrez-le à nouveau, il vaut mieux trouver la dernière ligne à chaque fois.

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

C'est ce que je pensais aussi, mais ce code ne résout pas mon problème (il écrit sur la même ligne à plusieurs reprises). Je pense que j'ai besoin de la variable "Row" pour être persistant, de sorte que le numéro de ligne est stocké après que le bouton est cliqué. En l'état, la variable "i" est initialisée à 0 chaque fois que ce code est exécuté. Je ne suis pas sûr de savoir comment rendre la variable "Row" persistante. Des idées? Merci. – AME

+0

Ah! Ici: Ceci sera toujours ajouté à la fin de la feuille, en recherchant la colonne A et en retournant la prochaine ligne vide. –

+0

Merci cela fonctionne parfaitement! – AME

Questions connexes