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.

Était-ce utile?

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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top