2016-10-11 1 views
0

J'ai une macro enregistrée que j'ai essayé de simplifier en obtenant un certain nombre d'instructions activate et select sur une seule ligne, mais cela entraîne une erreur d'exécution.Excel VBA - erreur d'exécution 1004 lors de la simplification du code enregistré

Ce n'est pas un problème critique, mais je suis simplement curieux de comprendre ce qui se passe. Ceci est mon extrait de code initial (il est précédé d'un extrait de copie dans la procédure):

ThisWorkbook.Activate 
Sheets("MS Act Report").Select 
Range("G1").Select 
ActiveSheet.Paste 

ceci est mon code simplifié:

ThisWorkbook.Activate 
Sheets("MS Act Report").Range("G1").Select 
ActiveSheet.Paste  

Lorsque vous exécutez ce que j'obtenir un

runtime error '1004': Select method of Range class failed

+0

Vous ne pouvez sélectionner des plages sur la feuille active. Si "MS Act Report" n'est pas la feuille active, vous ne pouvez pas exécuter une commande .select par rapport à ses cellules. – vacip

+3

Vous n'avez pas besoin de sélectionner quand même: 'ThisWorkbook.Sheets (" MS Act Report "). Range (" G1 "). PasteSpecial' – Rory

+0

@vacip - merci. Donc, en utilisant les commandes de sélection séparées, la feuille est activée mais ce n'est pas le cas si je l'ai sur une ligne. – doterfish

Répondre

2

Vous pouvez uniquement sélectionner des plages sur l'acti feuille de cinq. Si "MS Act Report" n'est pas la feuille active, vous ne pouvez pas exécuter une commande .select par rapport à ses cellules. Pour simplifier le code, au lieu de copier-coller, il suffit de rendre les plages égales.

Thisworkbook.WorkSheets("MS Act Report").Range("G1:I5").Value= _ 
    ActiveWorkbook.Worksheets("Whatever").Range("a1:c5").Value 

Quelques lectures recommandées: How to avoid using select

+0

Merci pour les suggestions, mais la gamme qui est copiée est différente à chaque fois que la procédure est exécutée, donc je devrais contourner cela. Donc, la suggestion de Rory ci-dessus semble plus simple. – doterfish