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: 3344
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: 386
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: 3344
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: 196
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: 3344
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: 196
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: 165
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: 3344
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
  • Nefunguje nová PC
    od adoyss » 16 led 2025 05:06 » v Problémy s hardwarem
    7
    3379
    od martanius Zobrazit poslední příspěvek
    17 led 2025 02:29
  • T490s nefunguje trackpoint UPDATE Příloha(y)
    od Sadelník1234 » 17 led 2025 21:49 » v Problémy s hardwarem
    3
    3199
    od kecalek Zobrazit poslední příspěvek
    20 led 2025 16:00
  • Snímač otisku najednou nefunguje, laptop Příloha(y)
    od frisby » 17 srp 2024 22:18 » v Problémy s hardwarem
    1
    1658
    od frisby Zobrazit poslední příspěvek
    18 srp 2024 10:46
  • USB-C hub nefunguje na jednom ASUS notebooku s Thunderbolt 4, na jiném ano
    od Atjov1 » 20 bře 2025 19:58 » v Problémy s hardwarem
    10
    5637
    od Atjov1 Zobrazit poslední příspěvek
    03 čer 2025 14:53
  • ASUS PRIME Z790-A WIFI - Intel Z790 + Samsung 990 PRO (Nefunguje Boot & Instalace Win 10) Příloha(y)
    od Polkiking » 14 srp 2024 15:50 » v Problémy s hardwarem
    6
    4497
    od Zivan Zobrazit poslední příspěvek
    15 srp 2024 09:16

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

Kdo je online

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