2013-04-09 6 views
2

Je continue à courir dans une erreur (qui se produit sans motif ou raison perçue). L'erreur se produit lorsque j'essaie de faire un pastespecial (formules ou valeurs). Je suis curieux de savoir s'il existe une autre façon de coller des valeurs ou des formules dans VBA étant donné que le nombre de lignes dans le tableau est variable (de 1 à ~ 100). J'ai joint l'extrait de code ci-dessous.Erreur d'exécution 1004 "Méthode de classe de classe a échoué"

« longueur et selectionarea sont définis comme des chaînes

Range("P1").Select 

» la longueur est une formule dans une cellule qui compte la longueur de la table

length = ActiveCell.Value 
selectionarea = "B3:CM" + length 
Range("B2:CM2").Select 
Selection.Copy 
Range(selectionarea).Select 
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ 
    SkipBlanks:=False, Transpose:=False 
selectionarea = "C2:O" + length 
Range(selectionarea).Select 
Selection.Copy 
Range("BL3").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
+0

Quelle est la valeur de 'longueur' lorsque vous obtenez l'erreur? Vous devriez utiliser '&' pour concaténer les chaînes dans VBA. "+" n'est pas recommandé. Sur quelle ligne échoue-t-il? – Brad

+0

En cas d'échec (ce qui n'est pas toujours le cas), il échoue sur le pastespecial (valeurs ou formules). – user2263642

+0

et quelle est la vaule de 'longueur' quand elle échoue? – Brad

Répondre

2

Essayez quelque chose comme ça

Dim rng As Range, Length 

Length = Range("P1").Value 

'EDIT use this for formulas 
Range("B2:E" & Length).Formula = Range("B2:E2").Formula 
'or this should also work 
'Range("B2:E" & Length).FillDown 

Set rng = Range("C2:O" & Length) 
Range("BL3").Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value 
+0

J'ai essayé la formule ci-dessus (je n'ai pas utilisé de code comme ça avant ...ne le comprends pas complètement). Pour les formules coller - il semble avoir un problème avec mon application et je ne sais pas comment le réparer dans le code. La formule dans B2 référence BL2 ... lors de la copie, la formule dans B3 fait référence à BL3, B4 renvoie cependant à BL5, B5 à BL7, B6 à BL9. B4 doit référencer BL4, B5 avec BL5 et B6 avec BL6. Y a-t-il un moyen d'aborder cela dans le code? – user2263642

+0

Ce code est très rapide et utile Je dois dire ... existe-t-il un moyen facile de configurer le code pour copier les valeurs d'une feuille à l'autre? Exemple Copie de données de sheet1 à sheet2? – user2263642

+0

Voir mon édition pour les formules: mon mauvais - je n'ai pas testé complètement mon approche originale. La copie entre feuilles devrait fonctionner correctement. –

1

Erreur: La méthode 'Coller' de l'objet '_Worksheet' a échoué - 1004
Solution: Vous devez vous souvenir des problèmes dans Excel avant de copier les formes d'une feuille à une autre.

  1. Activer la feuille (d'où vous copiez).
  2. Sélectionnez les formes de la feuille.
  3. Copiez les formes de la feuille.
  4. Coller pour façonner à la feuille cible

Exemple: Avant mon code est comme ci-dessous:

  Sheet1.Shapes(0).Copy 
      Targetsheet.Paste 

J'ai modifié le comme ci-dessous:

  Sheet1.Activite 
      Sheet1.Shapes(0).Select 
      Sheet1.Shapes(0).Copy 
      Targetsheet.Paste 

Maintenant, il fonctionne très bien .

Questions connexes