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

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: 366
Registrován: červen 13
Pohlaví: Muž
Stav:
Offline

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

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

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

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

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

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

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
  • Ethernet nefunguje
    od CowanCZ » 03 bře 2024 12:11 » v Internet a internetové prohlížeče
    10
    1204
    od xCloudGirl Zobrazit poslední příspěvek
    05 bře 2024 17:40
  • Router nefunguje.
    od urbassscz » 07 kvě 2023 21:27 » v Problémy s hardwarem
    5
    978
    od ITCrowd Zobrazit poslední příspěvek
    08 kvě 2023 19:03
  • Outlook app nefunguje
    od WangJason97 » 31 srp 2023 11:19 » v Mobily, tablety a jiná přenosná zařízení
    0
    1506
    od WangJason97 Zobrazit poslední příspěvek
    31 srp 2023 11:19
  • O2 TV aplikace - NEFUNGUJE?
    od holas18 » 09 dub 2023 16:17 » v Vše ostatní (z oblasti IT)
    5
    3026
    od pcmaker Zobrazit poslední příspěvek
    21 dub 2023 18:15
  • Nefunguje bezdrátová myš
    od Pidek » 01 kvě 2023 14:07 » v Problémy s hardwarem
    1
    636
    od mmmartin Zobrazit poslední příspěvek
    01 kvě 2023 17:12

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

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 10 hostů