Stránka 1 z 1

Nefunguje příkaz COPY ve VBA

Napsal: 14 led 2021 15:40
od atari

Kód: Vybrat vše

wsSkupiny.Range("A1:C2").Copy wsSestava.Range("A1:C2")

Tento kod z listu Skupiny kopíruje obsah buněk na list Sestava, a to funguje.


Kód: Vybrat vše

wsSkupiny.Range(Cells(1, 1), Cells(3, 2)).Copy wsSestava.Range(Cells(1, 1), Cells(3, 2))

Jenže tento kod s použitím Cells dává tuto chybu:
Run-time error '1004ˇ:
Method 'Range' of object '_Worksheet' failed.


Víte někdo jak to kopírování rozchodit přes Cells?

Re: Nefunguje příkaz COPY ve VBA  Vyřešeno

Napsal: 14 led 2021 18:27
od elninoslov
Lebo Cells(1, 1) je z aktívneho listu alebo z volajúceho listu (podľa toho, kde je makro uložené). Muselo by to byť nejak takto (neskúšal som)

Kód: Vybrat vše

wsSkupiny.Range(wsSkupiny.Cells(1, 1), wsSkupiny.Cells(3, 2)).Copy wsSestava.Range(wsSestava.Cells(1, 1),wsSestava. Cells(3, 2))

ale radšej by som použil Resize, ale najlepšie ako cieľovú oblasť iba jej prvú bunku.

Kód: Vybrat vše

wsSkupiny.Cells(1, 1).Resize(3, 2).Copy wsSestava.Cells(1, 1)


EDIT:
A ešte pozerám, že v prvom makre máte oblasť 2 riadky a 3 stĺpce a v druhom makre opačne 3 riadky a 2 stĺpce.

Re: Nefunguje příkaz COPY ve VBA

Napsal: 14 led 2021 18:44
od atari
Díky za radu. Fungují obě varianty. :thumbup:

Aha, tak jsem se teď někde dočetl, že COPY funguje jen na aktivním listě. Proto to nefungovalo na mém makru. To mě nenapadlo, že to lze takto obejít.

To makro nemám v listě ale v modulu.

(Ty přehozené řádky, sloupce -, to byl jen příklad pro ukázku)

Re: Nefunguje příkaz COPY ve VBA

Napsal: 15 led 2021 12:54
od lubo.
atari píše:Aha, tak jsem se teď někde dočetl, že COPY funguje jen na aktivním listě. Proto to nefungovalo na mém makru.


Omyl. Nebylo to Copy. Nefungovalo to kvůli lenosti. Range, Cells, ... bez uvedení rodiče se odkazují jen na aktivní list. Pokud je někdo líný sdělit ze kterého listu se data berou, musí počítat s důsledky. Vždy se vyplatí dát tam tečku a explicitně se odkázat na správný objekt. (Lépe se kontroluje kód, není nutné se zabývat, jestli se to spouští ze správného listu, a funguje to i v případě oblastí z více listů v jednom příkazu.)

Re: Nefunguje příkaz COPY ve VBA

Napsal: 15 led 2021 14:50
od atari
Tomu rozumím, ale já žil v přesvědčení, že když dám před RANGE název listu, tak je jasně definované ze kterého listu ta oblast za RANGE pochází.

A teď jsem tedy zmaten, že toto tak není:

Kód: Vybrat vše

wsSkupiny.Range(Cells(1, 1), Cells(3, 2)).Copy wsSestava.Range(Cells(1, 1), Cells(3, 2))

Re: Nefunguje příkaz COPY ve VBA

Napsal: 15 led 2021 21:35
od lubo.
Je to tak. Ale ve výrazu máš taky cells, přesněji activesheet.cells(...). A pokud do range dáš jako parametr oblast z jiného listu, tak se vrátí oblast podle parametrů.

Re: Nefunguje příkaz COPY ve VBA

Napsal: 15 led 2021 21:58
od Grimm
Elnino už příklady řešení. Pokud by jsi chtěl zůstat u svého zápisu, tak:

Kód: Vybrat vše

wsSkupiny.Range(Cells(1, 1).Address, Cells(3, 2).Address).Copy wsSestava.Range(Cells(1, 1).Address, Cells(3, 2).Address)

Ale je to zbytečně nepřehledné.

Re: Nefunguje příkaz COPY ve VBA

Napsal: 15 led 2021 22:35
od atari
Jasně už to chápu. díky za rady.

Nakonec jsem skončil u toho "resize". To je nejelegantnešjí.