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: 2861
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: 303
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: 2861
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: 185
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: 2861
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: 185
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: 128
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: 2861
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
  • VBA - copy paste sloupečků
    od mejlacz » 18 čer 2021 14:22 » v Kancelářské balíky
    1
    272
    od atari
    18 čer 2021 16:03
  • žádný příkaz - tablet sencor element 10.1D102
    od janule » 29 bře 2021 11:09 » v Mobily, tablety a jiná přenosná zařízení
    13
    820
    od dvorakj
    29 bře 2021 16:48
  • uTorrent a AVG VPN nefunguje
    od fafejt » 05 bře 2021 22:46 » v Komunikace na internetu
    4
    753
    od fafejt
    05 bře 2021 23:03
  • Nefunguje mikrofon
    od Terytory » 02 bře 2021 14:48 » v Problémy s hardwarem
    1
    331
    od ITCrowd
    02 bře 2021 17:20
  • Nefunguje monior
    od domino1915 » 18 říj 2021 12:22 » v Problémy s hardwarem
    2
    277
    od petr22
    18 říj 2021 12:51

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

Kdo je online

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