Excel - zkrácení vzorce makro

Od: Datum: 11.04.16 11:46 odpovědí: 6 změna: 12.04.16 14:42

Dobrý den. Měl bych dotaz, zda by někdo nevěděl jestli by šlo tento vzorec z Makra zkrátit. Nebo jej zapsat jinak, ale kratší na počet znaků.

Sheets("novy").Activate
Range("B3:FD3").Select
Selection.Copy
Sheets(1).Activate
Range("B2").Select
ActiveSheet.Paste

Díky za rady a tipy.


Seznam odpovědí:
 
moment čekejte prosím, probíhá přenos dat...
Zobrazení struktury odpovědí v otázce
Skrytí struktury odpovědí v otázce
Zobrazení struktury odpovědí v otázce

 

Odpovědi na otázku:
Datum: 11.04.16 14:15
avatar

dejte si pozor při ladění, ať si tabulku nepoškodíte. Označení Sheets(1) znamená odkaz na první list zleva.

Takto napsané makro vám bude okopírovaná data vždycky házet do prvního listu zleva.

*

Sub Macro2()
Sheets("novy").Range("B3:FD3").Copy
Sheets(1).Activate
Range("B2").Select
Sheets(1).Paste
End Sub

Ohodnoceno: 2x
 
Od: dotazexcel
Datum: 11.04.16 15:58

Děkuji.

Ještě bych měl otázku, jaká je maximální velikost makra (excel 2007)? A čím je omezena? Počtem znaků, velikostí a tak.

Díky.

Datum: 11.04.16 16:56
avatar

makro není nijak omezené ve velikosti, ale píše se tak krátké, aby

1/ pokud možno bylo vidět úplně celé

2/ vykonávalo jen jednu činnost.

Dlouhá makra, která vykonávají spoustu různých činností, se právem považují za školáckou chybu. Říká se jim špagetový kód, s takovými makry se špatně zachází a ještě hůř se opravují. Problém se řeší tak, že z hlavního řídícího makra voláte další makra a z těch dalších maker můžete volat ještě další makra atd.

Mrkněte na obrázek. Z prvního makra nahoře se volají další tři makra, která nastavují nějaké ovládací prvky. Kdybyste všechny ty tři zdrojáky napsal do toho horního makra, tak se za pár dní nevyznáte ve svém vlastním programu.

Ohodnoceno: 2x
 
Od: dotazexcel
Datum: 12.04.16 08:17

Já ten vzorec mám proměnlivý. Nejdřív podle buňky A2 naimportuje data do listu novy, pak nakopiruje data z listu novy na pozici B2 a list novy smaze. Poté podle A3 naimportuje data do listu novy a pak nakopiruje na pozici B3 a zas list novy smaze. A tak dale. Celkem jsem to chtěl asi 500x, ale stačilo by mi i 100x.

Ve sloupci A jsou vychozi data, tak nevim jak to vyresit jinak.

Datum: 12.04.16 13:50
avatar

Jestli ale chcete jen kopírovat nějaké hodnoty, pak nemusíte nic vybírat, ani opakovaně vytvářet a mazat nové listy. Docela obyčejně použijte cyklus, který hodnoty přenese.

Není snadné zvládnout cykly. Ale jak je zvládnete, tak se před vámi otevřou nevídané obzory a excel začne dělat věci, o kterých normální uživatelé nemají ani tušení. Například kopírovat data nebo rovnou celé listy ze zamčených, zaheslovaných a neotevřených exceláckých souborů atd. Není špatné to umět, protože se dozvíte ledaco zajímavého.

Vytvořte si tabulku jakou mám já a zkuste, co dělají tato dvě makra.

*

Option Explicit

Sub Macro1()

Dim I As Integer

For I = 1 To 10

Range("A1").Offset(I, 1).Value = Range("A1").Offset(I, 0).Value

Next I

End Sub

Sub Macro2()

Dim I As Integer

For I = 1 To 10

Range("A1").Offset(I, 2).Value = Range("A1").Offset(I, 0).Value

Next I

End Sub


doplněno 12.04.16 15:07:

já se raději neptám kam se chcete vlomit. ale zde jsme na poradně a proto vám radím, raději toho nechte.

Ohodnoceno: 0x
 
Od: dotazexcel
Datum: 12.04.16 14:42

Takhle, mám sloupec kde je ičo a pomocí funkce xml chci naimporovat data do excelu z ARESu dávkově. Třeba 200 naráz. Víc ne.

Mám takovéto makro, které se opakuje a mění se cíl. Takže místo A2-F2 je A3-F3... Jenže pak to píše, že je vzorec dlouhý, tak jsem jej chtěl nějak zkrátit.

*

Sub test()
Application.ScreenUpdating = False
Application.DisplayAlerts = False

Sheets.Add(After:=Sheets(Sheets.Count)).Name = "ares"

Sheets("ares").Activate

ActiveWorkbook.XmlImport URL:=" http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=" & Sheets(1).Range("A2").Value, ImportMap:=Nothing, Overwrite:=True, Destination:=Range("$A$1")

Sheets(1).Activate

Sheets(1).Range("B2") = Sheets("ares").Range("AC3")
Sheets(1).Range("C2") = Sheets("ares").Range("BG3")
Sheets(1).Range("E2") = Sheets("ares").Range("BF3")
Sheets(1).Range("F2") = Sheets("ares").Range("FD3")

Sheets("ares").Delete

Application.ScreenUpdating = True
Application.DisplayAlerts = FaTruelse
End Sub


doplněno 12.04.16 15:22:

Vlomit se nechci nikam, jen chci aktualizovat vlastní databázi za pomoci IČO. Žádnou z podmínek neporušuji a jsem si jich vědom. Nechci dělat žádné hromadné útoky. Stačí mi tak 200 - 300 dotazů na jejich databázi mimo špičku. Přesto děkuji.

http://wwwinfo.mfcr.cz/ares/ares_podminky.html.cz

 

 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz

 
Copyright © 2004-2016 Poradna Poradte.cz. Všechna práva na poradně Poradte.cz vyhrazena.