< návrat zpět

MS Excel


Téma: Kopírování dvou listů ze sešitu rss

Zaslal/a 24.2.2020 20:51

Dobrý večer,

mám jednoduché makro, které kopíruje buď list "leden" nebo list "duben" podle toho, zda je zaškrtnuto zaškrtávací políčko. Nyní bych chtěl docílit toho, aby se při zaškrtnutém políčku ze sešitu zkopírovaly dva listy "leden" a "unor".

Samozřejmě bych to mohl udělat jednoduše, ale to nechci, jelikož to hodlám napasovat do kódu, který je už sám o sobě velmi dlouhý, je v něm několik větvení atd. Tímto dalším zapodmínkováním bych ho defakto ještě zdvojnásobil.

Private Sub CommandButton1_Click()

If CheckBox1.Value = True Then

ThisWorkbook.Worksheets(Array("leden", "unor")).Copy

Else

ThisWorkbook.Worksheets(Array("duben")).Copy

End If

End Sub


Rád bych to udělal následujícím způsobem, který pro samostatné listy funguje. Nevím, jak rozšířit rozsah o další list "unor". Zkoušel jsem několik zápisů, ale bezvýsledně. Lze to tímto způsobem vůbec provést?

Snad jsem to popsal srozumitelně.

Za postřehy děkuji

Private Sub CommandButton1_Click()

If CheckBox1.Value = True Then

rozsah = "leden"

Else

rozsah = "duben"

End If

ThisWorkbook.Worksheets(Array(rozsah)).Copy

End Sub

Příloha: zip46038_copy1.zip (21kB, staženo 26x)
Zaslat odpověď >

#046039
avatar
ThisWorkbook.Sheets(Array("leden", "unor")).Copycitovat
#046044
elninoslov
JoKe: Vy ste to pochopil? A že vraj ja mám krištáľovú guľu. 2

Imh0tep: Vy chcete kopírovať ľubovoľne voliteľné listy? Na to predsa musíte mať pre každý list zatržítko.
Alebo chcete presunúť/kopírovať listy napr. staršie ako 3 mesiace? Tam sa dá použiť cyklus, ktorý pripraví pole, ktoré následne použijete, ako popísal JoKe. Určite, to nemusíte vypodmienkovávať. Lepšie to popíšte.citovat
#046051
avatar
Asi jsem to popsal poněkud nešťastně.

@ JoKe: takhle to právě nechci, uvádím to i v tom svém prvním kódu

@ elninoslov: chci vždy natvrdo kopírovat konkrétní listy, v uvedeném příkladu leden a únor (když bude checkbox zaškrtnutý) a duben, když zaškrtnutý nebude.

chci se vyhnout řešení pomocí:

ThisWorkbook.Worksheets(Array("leden", "unor")).Copy

Když ten svůj dotaz zjednoduším, tak potřebuji do proměnné rozsah nacpat názvy dvou listů (leden a unor), a to se mi právě nedaří. Prostě něco ve smyslu:

rozsah = "leden", "unor"

aby mi pak fungovalo níže uvedené makro pro leden a unor (při zaškrtnutém checkboxu). V makru mám záměrně nyní jen leden pro ilustraci, že makro pro kopírování samostatných listů funguje. Jen místo leden bych tam chtěl dostat leden a unor. Jde to vůbec tímto způsobem?

Pevně doufám, že už je to srozumitelné.

Private Sub CommandButton1_Click()
If CheckBox1.Value = True Then
rozsah = "leden"
Else
rozsah = "duben"
End If
ThisWorkbook.Worksheets(Array(rozsah)).Copy
End Sub
citovat
#046053
avatar
netusim z kolkatimi zaznamami pracujete. Ked pracujete s zaznamami kde je viac ako 100 000 riadkou a + pouzivate komplikovanejsie filtrovanie tak pre taketo uceli je dobre vyuzivat SQL syntaxu a v exceli nato sluzi kniznica ADODB.

tu je priklad ako vyvoval SQL prikaz UPDATE v exceli pomocou VBA:
https://stackoverflow.com/questions/12002805/update-an-excel-sheet-using-vba-adocitovat
#046058
avatar
Nějak takto?
Private Sub CommandButton1_Click()

If CheckBox1.Value = True Then
rozsah = Array("duben")
Else
rozsah = Array("leden", "unor")
End If
ThisWorkbook.Worksheets(rozsah).Copy
End Sub
citovat
#046061
avatar
To je přesně ono, geniální! :-)

díky moccitovat

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