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

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

Moderátor: Mods_senior

Uživatelský avatar
atari
Level 5.5
Level 5.5
Příspěvky: 2668
Registrován: říjen 08
Pohlaví: Muž

Nefunguje příkaz COPY ve VBA

Příspěvekod atari » 14 led 2021 15:40

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?



Reklama
Uživatelský avatar
elninoslov
Level 2.5
Level 2.5
Příspěvky: 274
Registrován: červen 13
Pohlaví: Muž

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

Příspěvekod elninoslov » 14 led 2021 18:27

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 5.5
Level 5.5
Příspěvky: 2668
Registrován: říjen 08
Pohlaví: Muž

Re: Nefunguje příkaz COPY ve VBA

Příspěvekod atari » 14 led 2021 18:44

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: 180
Registrován: červen 13
Pohlaví: Nespecifikováno

Re: Nefunguje příkaz COPY ve VBA

Příspěvekod lubo. » 15 led 2021 12:54

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 5.5
Level 5.5
Příspěvky: 2668
Registrován: říjen 08
Pohlaví: Muž

Re: Nefunguje příkaz COPY ve VBA

Příspěvekod atari » 15 led 2021 14:50

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: 180
Registrován: červen 13
Pohlaví: Nespecifikováno

Re: Nefunguje příkaz COPY ve VBA

Příspěvekod lubo. » 15 led 2021 21:35

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 1.5
Level 1.5
Příspěvky: 118
Registrován: září 17
Pohlaví: Muž

Re: Nefunguje příkaz COPY ve VBA

Příspěvekod Grimm » 15 led 2021 21:58

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 5.5
Level 5.5
Příspěvky: 2668
Registrován: říjen 08
Pohlaví: Muž

Re: Nefunguje příkaz COPY ve VBA

Příspěvekod atari » 15 led 2021 22:35

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

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


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Gta 5 nefunguje jak má
    od jelenejigr » 17 srp 2020 20:24 » v Hry
    3
    605
    od petr22
    13 zář 2020 07:11
  • PC nefunguje s GPU
    od Sigyam » 07 pro 2020 19:41 » v Problémy s hardwarem
    9
    316
    od Sigyam
    07 pro 2020 20:34
  • Restart nefunguje
    od BANGi » 10 úno 2020 23:07 » v Windows 10, 8, 7, Vista, XP…
    8
    856
    od BANGi
    11 úno 2020 09:13
  • Nefunguje tiskárna
    od karlik007 » 24 úno 2020 18:39 » v Problémy s hardwarem
    3
    469
    od ITCrowd
    24 úno 2020 20:44
  • Origin nefunguje
    od jinapolakova » 05 bře 2020 10:47 » v Hry
    1
    972
    od dvorakj
    05 bře 2020 23:07

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

Kdo je online

Uživatelé prohlížející si toto fórum: CommonCrawl [Bot] a 1 host