Nefunguje příkaz COPY ve VBA

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Zamčeno
Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3375
Registrován: 24 říj 2008 19:50

Nefunguje příkaz COPY ve VBA

Příspěvek 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?
Uživatelský avatar
elninoslov
Level 2.5
Level 2.5
Příspěvky: 386
Registrován: 12 čer 2013 23:40

Re: Nefunguje příkaz COPY ve VBA

Příspěvek 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.
Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3375
Registrován: 24 říj 2008 19:50

Re: Nefunguje příkaz COPY ve VBA

Příspěvek 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)
lubo.
Level 2
Level 2
Příspěvky: 196
Registrován: 27 čer 2013 23:26

Re: Nefunguje příkaz COPY ve VBA

Příspěvek 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.)
Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3375
Registrován: 24 říj 2008 19:50

Re: Nefunguje příkaz COPY ve VBA

Příspěvek 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))
lubo.
Level 2
Level 2
Příspěvky: 196
Registrován: 27 čer 2013 23:26

Re: Nefunguje příkaz COPY ve VBA

Příspěvek 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ů.
Uživatelský avatar
Grimm
Level 2
Level 2
Příspěvky: 165
Registrován: 30 zář 2017 20:50

Re: Nefunguje příkaz COPY ve VBA

Příspěvek 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é.
Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3375
Registrován: 24 říj 2008 19:50

Re: Nefunguje příkaz COPY ve VBA

Příspěvek od atari »

Jasně už to chápu. díky za rady.

Nakonec jsem skončil u toho "resize". To je nejelegantnešjí.
Zamčeno
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Nefunguje nová PC
    od adoyss » » v Problémy s hardwarem
    7 Odpovědi
    5978 Zobrazení
    Poslední příspěvek od martanius
  • Lenovo S-130 nefunguje touchpad
    od mk7605 » » v Problémy s hardwarem
    21 Odpovědi
    6708 Zobrazení
    Poslední příspěvek od mk7605
  • T490s nefunguje trackpoint UPDATE
    od Sadelník1234 » » v Problémy s hardwarem
    3 Odpovědi
    4056 Zobrazení
    Poslední příspěvek od kecalek
  • USB-C hub nefunguje na jednom ASUS notebooku s Thunderbolt 4, na jiném ano
    od Atjov1 » » v Problémy s hardwarem
    10 Odpovědi
    7730 Zobrazení
    Poslední příspěvek od Atjov1

Zpět na „Kancelářské balíky“