Excel VBA, obtenir la plage à partir d'une feuille inactive
Ce script fonctionne bien lorsque je regarde la feuille "Temp". Mais quand je suis dans une autre feuille, la commande copy échoue.. Il donne une "erreur définie par L'Application ou définie par l'objet"
Sheets("Temp").Range(Cells(1), Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial
Je peux utiliser ce script à la place, mais j'ai des problèmes avec le coller
Sheets("Temp").Columns(1).Copy
Sheets("Overview").Range("C40").PasteSpecial
- Je ne veux pas activer la feuille "Temp" pour obtenir ceci
Que puis-je faire d'autre
3 réponses
Votre problème est que parce que les références Cell
à l'intérieur des Range
ne sont pas qualifiées, elles se réfèrent à la valeur par défaut ActiveSheet
. Donc, votre code dit en fait
Sheets("Temp").Range(ActiveSheet.Cells(1), ActiveSheet.Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial
Voici une version mieux formée
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = ActiveWorkbook.Sheets("Temp")
Set sh2 = ActiveWorkbook.Sheets("Overview")
With sh1
.Range(.Cells(1,1), .Cells(1,1).End(xlDown)).Copy
End With
sh2.Range("C40").PasteSpecial
J'ai rencontré un problème comme ça moi: j'ai essayé de chercher dans une feuille de calcul distincte pour voir si la couleur d'une cellule correspondait à la couleur d'une cellule dans une liste et retourne une chaîne de valeur: si vous êtes en utilisant .Cellules (ligne, colonne), vous avez seulement besoin de cela: Feuilles ("sheetname").Cells(ligne, colonne) pour référencer cette gamme de cellules.
Je faisais une boucle à travers un bloc de 500 cellules et cela fonctionne étonnamment rapidement pour moi.
Je ne l'ai pas essayé avec .Copie, mais je suppose que ce serait de la même façon.
Cela fera l'affaire, je n'aime pas utiliser (xlDown) au cas où une cellule est vide.
Dim lRow As Long
lRow = Sheets("Temp").Cells(Cells.Rows.Count, "A").End(xlUp).Row
With Sheets("Temp")
.Range("A1:A" & lRow).Copy Sheets("Overview").Range("C40")
End With
Ou si vous voulez simplement utiliser des colonnes...
Sheets("Temp").Columns(1).SpecialCells(xlCellTypeConstants).Copy Destination:=Sheets("Overview").Range("C40")