Excel VBA « Autofill méthode de classe Range a échoué »
-
20-09-2019 - |
Question
Le code VBA suivant (Excel 2007) échoue avec l'erreur 1004, "Méthode de remplissage automatique classe Range a échoué.". Quelqu'un peut-il me dire comment y remédier?
Dim src As Range, out As Range, wks As Worksheet
Set wks = Me
Set out = wks.Range("B:U")
Set src = wks.Range("A6")
src.AutoFill Destination:=out
(note:. J'ai googlé, etc. Pour cela, il se heurte assez souvent, mais toutes les réponses que j'ai vu eu à faire avec des adresses gamme malformés, ce qui est AFAIK pas mon problème
.I Tried À la suggestion de quelqu'un remplaçant la ligne de remplissage automatique qui suit:
src.Copy out
Cela a eu pour effet de lancer ma session Excel dans une boucle infinie apparente consommation CPU à 100% et puis juste accroché pour toujours.
OK, apparemment la source doit faire partie de la gamme de destination pour le remplissage automatique. Donc, mon code ressemble maintenant à ceci:
Dim src As Range, out As Range, wks As Worksheet
Set wks = Me
Set out = wks.Range("B1")
Set src = wks.Range("A6")
src.Copy out
Set out = wks.Range("B:U")
Set src = wks.Range("B1")
src.AutoFill Destination:=out, Type:=xlFillCopy
même erreur sur la dernière ligne.
La solution
De MSDN :
La destination doit inclure la plage de source.
B:U
ne contient pas A6
et donc il y a une erreur. Je crois que vous voulez probablement out
à régler à A6:U6
.
preÂcisant juste le nom de la colonne signifie que vous voulez remplir toutes les lignes de cette colonne qui est peu susceptible d'être le behvaiour souhaité
Mise à jour
De plus au commentaire de l'OP ci-dessous et mise à jour à la réponse originale, cela pourrait faire l'affaire:
Dim src As Range, out As Range, wks As Worksheet
Set wks = Me
Set out = wks.Range("B1")
Set src = wks.Range("A6")
src.Copy out
Set out = wks.Range("B1:U1")
Set src = wks.Range("B1")
src.AutoFill Destination:=out, Type:=xlFillCopy
Set out = wks.Range("B:U")
Set src = wks.Range("B1:U1")
src.AutoFill Destination:=out, Type:=xlFillCopy
AutoFill
est limitée à une seule direction (par exemple horizontale ou verticale) à la fois. Pour remplir une zone à deux dimensions à partir d'une seule cellule vous devez d'abord remplir automatiquement une ligne le long d'un bord de cette zone et ensuite étirer cette ligne à travers la zone
Pour le cas spécifique de copier le formatage et l'effacement du contenu (en vertu de la cellule source étant vide), ce qui est mieux:
Dim src As Range, out As Range, wks As Worksheet
Set wks = Sheet1
Set out = wks.Range("B:U")
Set src = wks.Range("A6")
src.Copy out
Autres conseils
Pour faire fonctionner AutoFill
, vous devez faire la gamme de AutoFill
plus de la plage source . Si la plage est AutoFill même que la plage de source alors il n'y a rien à AutoFill dans cette gamme et vous serait donc obtenir une erreur
1004: Méthode de AutoFill classe Range a échoué
.
Alors faites plage AutoFill plus de la plage source et l'erreur sera passé.
Si vous voulez vous faire remplir automatiquement juste quelque chose comme ...
Private Sub Autofill()
'Select the cell which has the value you want to autofill
Range("Q2").Select
'Do an autofill down to the amount of values returned by the update
Selection.AutoFill Destination:=Range("Q2:Q10")
End Sub
Cela remplir automatiquement jusqu'à la plage spécifiée.
Est-ce que ths aide?
Je ne sais pas si cela aide quelqu'un, mais je avais besoin quelque chose de similaire. La sélection des cellules comme des œuvres de destination;
dim rowcount as integer
Sheets("IssueTemplate").Select ' Whatever your sheet is
rowcount = 0
rowcount = Application.CountA(Range("A:A"))'get end range
Cells(4, 3).Select 'select the start cell
'autofill to rowcount
Selection.AutoFill Destination:=Range("C4:C" & rowcount), Type:=xlFillDefault
dans mon exemple, je devais générer automatiquement une liste de noms de dossiers de OA100 à OA ### ?, et cela a bien fonctionné.