Makro - kopírování hodnot v tabulce Vyřešeno

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Makro - kopírování hodnot v tabulce

Příspěvekod VALL » 04 dub 2012 11:34

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.
Přílohy
Výkaz práce na zk lise_v2.xlsm
Vzorový soubor - list PomVypocet
(25.74 KiB) Staženo 43 x

Reklama
Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

Re: Makro - kopírování hodnot v tabulce

Příspěvekod Azuzula » 04 dub 2012 13:13

Ahoj,
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
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

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.

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Makro - kopírování hodnot v tabulce

Příspěvekod VALL » 04 dub 2012 14:32

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.

cmuch
Level 4.5
Level 4.5
Příspěvky: 1547
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: Makro - kopírování hodnot v tabulce

Příspěvekod cmuch » 04 dub 2012 19:32

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ší.

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Makro - kopírování hodnot v tabulce

Příspěvekod VALL » 05 dub 2012 08:35

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:

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 :cry:

cmuch
Level 4.5
Level 4.5
Příspěvky: 1547
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: Makro - kopírování hodnot v tabulce  Vyřešeno

Příspěvekod cmuch » 05 dub 2012 09:29

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.

Kód: Vybrat vše

Application.EnableEvents = False
Range("A" & i + 1) = Range("B" & i).Value
Application.EnableEvents = True

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Makro - kopírování hodnot v tabulce

Příspěvekod VALL » 05 dub 2012 09:44

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ý.

cmuch
Level 4.5
Level 4.5
Příspěvky: 1547
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: Makro - kopírování hodnot v tabulce

Příspěvekod cmuch » 05 dub 2012 10:26

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í


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek

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

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti