ahoj,
Pokouším se napsat makro, které za daných podmínek zkopíruje hodnotu do další buňky. Chci, aby se spustilo při každém zápise v sešitě PomVypocet.
Podmínka:
If Range("a6") = "" Then
Exit Sub
ElseIf Range("b6") <> "" Then
Range("a7") = Range("b6").Value
Aby to fungovalo i pro další řádek, přidal jsem další podmínku IF, která ale nefunguje. Nevím proč.
Podmínka2:
ElseIf Range("b7") <> "" Then
Range("a8") = Range("b7").Value
Nicméně tabulka má více řádků, takže výše uvedený postup je dost pracný. Hledal jsem i řešení přes proměnné, ale tam se mě nepodařilo nic vykoumat.
Cílem je kód. Který bez ohledu na počet řádků, vždy provede tento úkon:
ElseIf Range("b6") <> "" Then
Range("a7") = Range("b6").Value
Oblasti range nahradit proměnnýma tak, aby se makro vždy podívalo na další řádek, zda splňuje uvedenou podmínku u buněk +1.
Makro - kopírování hodnot v tabulce Vyřešeno
Makro - kopírování hodnot v tabulce
- Přílohy
-
- Výkaz práce na zk lise_v2.xlsm
- Vzorový soubor - list PomVypocet
- (25.74 KiB) Staženo 42 x
-
- Level 3
- Příspěvky: 452
- Registrován: leden 12
- Bydliště: Země, bohužel...
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Makro - kopírování hodnot v tabulce
Ahoj,
spuštění makra po každé změně v listu zařídí:
stačí vložit do listu (v editoru VBA) ve kterém se má automaticky spouštět to makro.
Proměnné v range se dají napsat třeba jako
A nakonec blokové If - nezapoměňte pokaždé ukončit tagem End If, v sešitu to tam v jednom makru chybělo proto asi ta chyba, jinak tam jinou chybu nevidím.
spuštění makra po každé změně v listu zařídí:
Kód: Vybrat vše
Private Sub Worksheet_Change(ByVal Target As Range)
'volání makra které se má spustit nebo přímo to makro
End Sub
Proměnné v range se dají napsat třeba jako
Kód: Vybrat vše
'Range("A" & i).select kde i = číslo řádku, které se dá získat třeba pomocí cyklu
For i = 1 to 7
'tělo cyklu
Next
'nebo Cells(i, j).select kde i = číslo řádku, j = číslo sloupku.
'přechod na další řádek se dá hezky udělat pomocí
activecell.offset(1, 0).select
A nakonec blokové If - nezapoměňte pokaždé ukončit tagem End If, v sešitu to tam v jednom makru chybělo proto asi ta chyba, jinak tam jinou chybu nevidím.
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Re: Makro - kopírování hodnot v tabulce
Doplnil jsem End If a stejně to nefunguje :(.
Díky za nakopnutí v druhém kódu. Mám ale obavu, že v případě většího rozsahu např., 1000 řádků, se stane sešit nepoužitelným pro práci.
Díky za nakopnutí v druhém kódu. Mám ale obavu, že v případě většího rozsahu např., 1000 řádků, se stane sešit nepoužitelným pro práci.
-
- Level 4.5
- Příspěvky: 1547
- Registrován: březen 11
- Bydliště: Drsná Vysočina :D
- Pohlaví:
- Stav:
Offline
Re: Makro - kopírování hodnot v tabulce
Pokud se do makra na začátek dá Application.ScreenUpdating = False a na jeho konec
Application.ScreenUpdating = True tak jednak nebude vidět, že makro něco dělá a zároveň průběh bude rychlejší.
Application.ScreenUpdating = True tak jednak nebude vidět, že makro něco dělá a zároveň průběh bude rychlejší.
Re: Makro - kopírování hodnot v tabulce
Díky všem za radu,
Pokusil jsem se to udělat dle rady Azuzuly a někde se mě to zacyklilo. Když doplním hodnotu do B6 tak vše ok, výpočet proběhne.
Když doplním hodnotu do B7, tak se to zacyklí.
kód:
Už si nevím rady
Pokusil jsem se to udělat dle rady Azuzuly a někde se mě to zacyklilo. Když doplním hodnotu do B6 tak vše ok, výpočet proběhne.
Když doplním hodnotu do B7, tak se to zacyklí.
kód:
Kód: Vybrat vše
Private Sub worksheet_change(ByVal target As Range)
If Range("A6") = "" Then
Exit Sub
End If
For i = 6 To 16
If Range("B" & i) <> "" Then 'b6
Range("A" & i + 1) = Range("B" & i).Value 'A7, B6
ElseIf Range("B" & i + 1) = "" Then 'B7
Exit Sub
End If
Next
End Sub
Už si nevím rady

-
- Level 4.5
- Příspěvky: 1547
- Registrován: březen 11
- Bydliště: Drsná Vysočina :D
- Pohlaví:
- Stav:
Offline
Re: Makro - kopírování hodnot v tabulce Vyřešeno
Do kódu doplň Application.EnableEvents = False a Application.EnableEvents = True
Ty jak přepíšeš hodnotu z jedný buňky do druhý tak znovu vyvoláš tento proces.
Ty jak přepíšeš hodnotu z jedný buňky do druhý tak znovu vyvoláš tento proces.
Kód: Vybrat vše
Application.EnableEvents = False
Range("A" & i + 1) = Range("B" & i).Value
Application.EnableEvents = True
Re: Makro - kopírování hodnot v tabulce
dík, funguje skvěle.
--- Doplnění předchozího příspěvku (05 Dub 2012 10:01) ---
Můžu tě ještě požádat k čemu se obecně Application.EnableEvents používá a jaký je jeho význam. něci jsem vygooglil, ale jsem z toho zmatený.
--- Doplnění předchozího příspěvku (05 Dub 2012 10:01) ---
Můžu tě ještě požádat k čemu se obecně Application.EnableEvents používá a jaký je jeho význam. něci jsem vygooglil, ale jsem z toho zmatený.
-
- Level 4.5
- Příspěvky: 1547
- Registrován: březen 11
- Bydliště: Drsná Vysočina :D
- Pohlaví:
- Stav:
Offline
Re: Makro - kopírování hodnot v tabulce
Používá se v událostech Excelu (SelectionChange, Change) kdy se provádí nějaké akce s následnou změnou buněk nebo jejich opravu.
Tím, že v těle procedury události změníte obsah buňky, můžete spustit cyklus, kdy se stále znovu a znovu vracíte do události,
protože se událost vyvolá vždy při změně znovu.
Použij vždy před jakoukoliv změnou vlastnost EnableEvents,
která dočasně vypne zpracování událostí objektu a umožní vám provést změny bez nového vyvolání události.
Syntaxe:
Application.EnableEvents = True Zapne zpracování událostí
Application.EnableEvents = False Vypne zpracování událostí
Tím, že v těle procedury události změníte obsah buňky, můžete spustit cyklus, kdy se stále znovu a znovu vracíte do události,
protože se událost vyvolá vždy při změně znovu.
Použij vždy před jakoukoliv změnou vlastnost EnableEvents,
která dočasně vypne zpracování událostí objektu a umožní vám provést změny bez nového vyvolání události.
Syntaxe:
Application.EnableEvents = True Zapne zpracování událostí
Application.EnableEvents = False Vypne zpracování událostí
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 0
- 2659
-
od LukM
Zobrazit poslední příspěvek
19 říj 2024 14:03
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti