VBA - Erreur d'Exécution 1004 'Application Définie ou Objet Défini à l'Erreur"
J'ai un document Excel qui copie une feuille de modèle dans une nouvelle feuille sur la première fois qu'il s'exécute. Plus de feuilles que de suivre ce modèle est annexé à la nouvelle feuille.
J'obtiens le message d'erreur dans le titre de cette section de code:
If Worksheets("User Configuration").Cells(9, 15).Value = 1 Then
Worksheets("Cable Cards Template").Range("A1:J33").Copy
With Worksheets("Cable Cards")
**.Range(Cells(RangeStartRow, RangeStartColumn), Cells(RangeEndRow, RangeEndColumn)).PasteSpecial xlValues**
.Range(Cells(RangeStartRow, RangeStartColumn), Cells(RangeEndRow, RangeEndColumn)).PasteSpecial xlFormats
End With
Worksheets("Cable Cards Template").Shapes("Picture 1").Copy
Worksheets("Cable Cards").Paste Cells(RangeStartRow, RangeStartColumn)
Call Sheets.FormatCableCardRows
End If
Fondamentalement, si le If
affirmation est vraie (la cellule = 1), puis d'une plage sur une feuille spécifique doit être copié et collé dans la nouvelle feuille à la plage de données à l'aide de PasteSpecial
pour les valeurs et la mise en forme. Par la suite, le "nouvellement créé" feuille doit avoir une image copiée dans la cellule en haut à gauche du modèle, puis une sous-routine est appelée à mettre en forme les lignes de la nouvelle feuille.
J'obtiens le message d'erreur lors de la première .Range
l'appel après l' With Worksheets("Cable Cards")
déclaration. J'ai essayé de ne pas utiliser la With
déclaration, la copie des valeurs directement au lieu de coller spéciaux etc. La chose étrange est que cela va fonctionner sur le premier rendez-vous, lors de la nouvelle fiche est créée via:
If (RangeStartRow = 1) Then
Worksheets.Add().Name = "Cable Cards" ' Create new sheet with given name only on first cable card
Columns(1).ColumnWidth = 9.43
Columns(6).ColumnWidth = 11
Columns(10).ColumnWidth = 9
Call FormatForA5Printing("Cable Cards", 71)
End If
mais sur le 2e go, il échoue complètement, avec le Run Time Error 1004 'Application Defined or Object Defined Error'
. J'apprécierais toute aide.
OriginalL'auteur user3105671 | 2013-12-16
Vous devez vous connecter pour publier un commentaire.
Votre objet de cellules n'est pas pleinement qualifié. Vous avez besoin d'ajouter un
DOT
avant de l'objet de cellules. Par exempleDe même, qualifier entièrement toutes les Cellules de votre objet.
Qui était-il, je vous remercie pour cela, n'aurait jamais repéré c'est le contraire!
+1 Il est remarquable de voir combien souvent on trouve des erreurs découlant de ne pas admissible varie de façon appropriée.
OriginalL'auteur Siddharth Rout
Solution #1:
Votre déclaration
ne se réfère pas à un bon
Range
pour agir. Au lieu de cela,n' (et même dans certains autres cas).
Solution #2:
Activer
Worksheets("Cable Cards")
avant à l'aide de ses cellules.Explication:
Cells(RangeStartRow, RangeStartColumn)
(par exemple) vous donne unRange
, que serait être ok, et c'est pourquoi vous voyez souventCells
utilisé de cette façon. Mais comme il n'est pas appliquée à un objet spécifique, il s'applique à laActiveSheet
. Ainsi, votre code tente à l'aide de.Range(rng1, rng2)
, où.Range
est une méthode deWorksheet
objet etrng1
etrng2
sont dans un autreWorksheet
.Il y a deux vérifications que vous pouvez faire pour que ce soit tout à fait évident:
Activer votre
Worksheets("Cable Cards")
avant l'exécution de votreSub
et il va commencer à travailler (vous avez maintenant bien formé références àRange
s). Pour le code que vous avez posté, ajoutant.Activate
juste aprèsWith...
serait en effet une solution, bien que vous pourriez avoir un problème similaire quelque part dans votre code en se référant à uneRange
dans un autreWorksheet
.Avec une feuille autre que
Worksheets("Cable Cards")
active, définissez un point d'arrêt à la ligne de lancer l'erreur, démarrez votreSub
, et lors de l'exécution de sauts, d'écrire à la fenêtre exécutionDebug.Print Cells(RangeStartRow, RangeStartColumn).Address(external:=True)
Debug.Print .Cells(RangeStartRow, RangeStartColumn).Address(external:=True)
et de voir les différents résultats.
Conclusion:
À l'aide de
Cells
ouRange
sans objet spécifié (par exemple,Worksheet
, ouRange
) peut être dangereux, surtout lorsque l'on travaille avec plus d'uneSheet
, sauf si on est assez sûr de ce queSheet
est active.OriginalL'auteur sancho.s
Assgining une valeur qui commence par un "=" donnera un coup de pied dans la formule d'évaluation et donne dans mon cas, l'erreur mentionnée ci-dessus #1004. Les préfixant avec un espace a été le billet pour moi.
OriginalL'auteur Mosca Pt