2013-04-17 4 views
2

J'ai un peu de difficulté avec un sous-programme VBA qui prend les informations saisies sur la première feuille d'un classeur Excel - "Entrée", et les colle dans une feuille séparée dans le même classeur - "Base de données". Ce dont j'ai besoin, c'est que les données soient ajoutées à la rangée vide suivante de la base de données. J'apprécie que ce soit une question assez commune, mais j'ai regardé Google pour la meilleure partie de ce matin et ne peux pas tout à fait l'obtenir! Le code que je suis parvenu à ce jour copiera les données, mais toujours remplacer la première ligne:Copie Excel VBA à ligne vide

Sub CopyDataToDatabase() 

Application.ScreenUpdating = False 

Dim r As Range 
Set r = Sheets("Entry").Range("B6:M6") 
For Each cell In r 
    If IsEmpty(cell) Then 
     MsgBox ("Error - all boxes must be filled in!") 
     Cancel = True 
     Exit Sub 
     Exit For 
    End If 
Next 

Dim NextRow As Range 
Set NextRow = Sheets("Database").Range("A2:L2").End(xlUp).Offset(1, 0) 
' Set NextRow = Sheets("Database").Range("A" & Rows.Count).End(xlUp).Row + 1 
Sheets("Entry").Range("B6:M6").Copy 
NextRow.PasteSpecial (xlValues) 

MsgBox ("Data added successfully!") 

Sheets("Entry").Range("B6:M6").ClearContents 

Application.CutCopyMode = False 
Application.ScreenUpdating = True 
End Sub 

Le commentaire de Set NextRow est l'autre méthode que j'ai essayé, qui ne fonctionne pas (erreur était « objet Champs obligatoires').

Toute aide reçue avec gratitude, d'autant plus si vous pouviez l'expliquer - comme je suis un peu nouveau à VBA!

Merci d'avance.

+0

Je recommande d'avoir un regard sur ce lien http://stackoverflow.com/questions/11169445/error-finding-last-used-cell-in-vba Pour trouver la dernière cellule Col A utilisez la méthode spécifiée par @ChrisNeilson ci-dessous. Mais s'il y a une possibilité que la colonne Col A Last ne soit pas la même que Col B - Col L alors utilisez la méthode '.Find' pour trouver la dernière cellule et ensuite utilisez-la pour créer votre range. –

Répondre

1

Votre ligne commentée est presque la bonne méthode. Essayez cette

Set NextRow = Sheets("Database").Range("A" & Rows.Count).End(xlUp).Offset(1,0) 
+0

+ 1 Cela devrait fonctionner si toutes les colonnes (A à L) ont la même traînée. –

+0

A travaillé parfaitement - merci pour votre aide. Oui, heureusement, toutes les valeurs de données doivent être remplies, donc les dernières colonnes ne sont pas un problème! –

0

La propriété Sheet est UsedRange, mais selon mon expérience, elle est sujette à des erreurs. La façon dont je le fais toujours est de parcourir les lignes pour trouver le premier vide.

Dim iRow as integer 
iRow = 1 
Dim ws as Worksheet 
Set ws = Worksheets("Database") 
Do While ws.Cells(iRow, 1) <> "" 
    iRow = iRow + 1 
Loop 

En général, dans l'écriture de code VBA J'essaie d'éviter émulant ce que je fais avec Excel en tant qu'utilisateur (par exemple en utilisant Selection objet ou émulant pressions sur les touches).

Questions connexes