< návrat zpět

MS Excel


Téma: Copy oblasti rss

Zaslal/a 13.9.2011 11:04

Poprosil by som o radu. Ak vo VBA kopirujem oblast pomocou ... Range("B3":"O12").Copy, tak to funguje. Ak vsak na adresaciu pouzijem
... Range(Cells(3,2),Cells(12,15)).Copy, tak mi neskopiruje nic ani nehlasi chybu.
Poradi niekto, kde robim chybu? Dakujem

Zaslat odpověď >

icon #005953
Poki
tenhle pristup mi normalne funguje - jen je potreba rict, ze .Copy (s pouzitim Cells) lze pouzit jen na aktivnim listu...citovat
#005954
avatar
Dakujem. Copy nerobim na aktivnom liste, ale na liste ktory dostanem z otvoreneho suboru pomocou Workbooks.Open Filename:="C:\ ...
Problem je v tom, ze potrebujem dynamicky menit druhu suradnicu XY v Copy oblasti B3: XY, pricom X a Y (cislo stlpca a riadku) mam v samostatnych dvoch bunkach. Ako potom mam robit Copy z takto sa meniacej oblasti z otvoreneho suboru?citovat
icon #005955
Poki
aha, jeste navic jine sesity - lze to resit prepinanim mezi sesity a listy (.Activate nebo .Select)

zkuste prilozit soubory...citovat
#005956
avatar
Kopírování používáš v rámci aktivního listu. Tj

Range("A1").Copy Range("B3")

Pokud chceš kopírovat z aktivního listu do jiného listu listu pak použiješ

Range("A1").Copy Worksheet("List2").Range("B3")

Pokud chceš kopírovat z jiného listu listu do aktivního listu pak použiješ

Worksheet("List3").Range("A1").Copy Range("B3")

A pokud otevřeš nový sešit a chceš z něj kopírovat do jiného pak je možné po otevření si nastavit proměnnou a pak s ní pracovat

' Můj sešit
Set A = ActiveWorkbook

' Otevřu jiný
Open...

Set B = ActiveWorkbook

A.Activate

Range("A1").Copy B.Worksheet("List1").Range

B.Close False

atd.

Podstatné je že:
- Aktivní sešit nemusíš uvádět.
- Nemusíš aktivovat příjemce když uvedeš cestu
- Pro lepší čitelnost při kopírování mezi sešity je vhodné nastavit proměnnou typu Workbooks

Pokud se týče kopírování mezi buňkami při větším množství je vhodné použít cyklus foreach

For each C in Worksheet("List3").Range("A1:A10")
C.Copy Worksheet("List3").Range(C.Address)
Next C

Tvůj případ je pak

For i = 1 to 10
Cells(i,1).Copy Worksheet("List3").Cells(i+10,3)
Next i

Ikdyž je na něco Cells vhodné ... převážně používám For Each protože se s tím líp pracuje.
R.citovat
#005962
avatar
Dakujem obidvom za odpovede.
Poki, snazil som sa vytvorit nejaky vzorovy priklad, ale sa mi to nepodarilo, je to zlozite. Cela aplikacia je znacna rozsiahla, takze ju nemozem prilozit. Cely problem spociva v tom, ze potrebujem skopirovat oblast z otvoreneho suboru - listu (nie aktivny) do Pracovneho zositu, listu. Oblast v otvorenom subore - liste, je pre kazdy novy list odlisna, avsak stale zacina na bunke B3.Druha, oblast vymedzujucu, je meniaca sa bunka, pricom cislo stlpca a riadku je v samostatnych dvoch bunkach v Pracovnom zosite.
RomanNTA: poucne priklady, ale vhodne pre Copy z Aktivneho listu do ineho zositu. Moj pripad je ale opacny. Kopirovat z otvoreneho zositu do aktivneho listu.citovat
#005965
avatar
... běžně Tvůj případ funguje spolehlivě.

Workbooks("otevřený sešit v pozadí.xls").Worksheets("blabla").Range("B12").Copy Range("A1")

Workbooks("otevřený sešit v pozadí.xls").Worksheets("blabla").Range("B12").Copy Cells(2, 2)

Co toto
Range("B3":"O12").Copy nahradit Range("B3:O12").Copy

Je jedno kterým směrem kopíruješ ... aktivní nemusíš psát a tene druhý ano. V makru si musíš být jistý na kterém v daný okamžik stojíš a nebo je Ti to jedno a kopíruješ mezi dvěma skrytými sešity v pozadí a musíš napsat cesty k oběma. Zkus si přečíst můj koment ještě jednou.

R.citovat
#005968
avatar
Zrejme si nepochopil prvu temu a nasledne odpovede od Pokiho a odo mna. To co uvadzas funguje s Range. Problem je, ako uvadza Poki, ze Copy s pouzitim Cells, mozno pouzit len na aktivnom liste.
Mne vsak ... Range(Cells(3,2),Cells(12,15)).Copy nefunguje. Inak neviem ako by sa dala dynamicky menit druha bunka Cells(12,15) resp "O12".citovat
#005974
avatar
Možná by bylo vhodnější taky něco z toho vyzkoušet. Myslím si, že jsem Tě pochopil správně.

Pokud Ti ani toto nepomůže, pak by bylo skutečně příště lepší abys poslal vzorek dat ... třeba smyšlený. Jinak je tato komunikace jen prostá ztráta času. R.

Sub test()
Dim i As Long
Dim j As Long
Dim k As Long
Dim s As String
Dim C As String

1. varianta
With Workbooks("KD.xls").Worksheets("KD")
For i = 12 To 15
For j = 5 To 10
k = Range("A65536").End(xlUp).Row + 5
s = Cells(i, j).Address
.Range("B3:" & s).Copy Cells(k, 1)
Next j
Next i
End With

2. varianta
With Workbooks("KD.xls").Worksheets("KD")
For i = 12 To 15
For j = 5 To 10
s = Cells(i, j).Address & ":" & Cells(j, i).Address
.Range(s).Copy Cells(i * 10 + 5, 1)
Next j
Next i
End With

3. varianta
With Workbooks("KD.xls").Worksheets("KD")
s = Cells(3, 3).Address & ":" & Cells(3, 15).Address
For Each C In .Range(s)
C.Copy Cells(5, C.Column)
Next C
End With

4. varianta
With Workbooks("KD.xls").Worksheets("KD")
s = Cells(3, 3).Address & ":" & Cells(3, 15).Address
.Range(s).Copy Range("A1")
End With

End Sub
citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje