Excel - Makro bez cyklu pro výpočet v kterémkoliv řádku

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

Moderátor: Mods_senior

Odpovědět
wilma
nováček
Příspěvky: 1
Registrován: 10 kvě 2017 08:57

Excel - Makro bez cyklu pro výpočet v kterémkoliv řádku

Příspěvek od wilma »

Zdravím,
potřebovala bych poradit s úpravou makra. Makro má po vyplnění buňky ve sloupci 8 ve stejném řádku některé buňky vyplnit, zamknout a provést výpočet do sloupce 14 z hodnot doplněných do sloupců 11,12.
Řádků postupně přibývá až do množství cca 200-300. Je nutné, aby výpočet proběhl hned, nikoliv po minutu dlouhém běhu případného cyklu. Makro je v sešitech určených pro mnoho různých uživatelů a každý se při vyplňování chová trochu jinak a má jiné požadavky..
Makro, které se mi povedlo sestavit, funguje prefektně do okamžiku, kdy někdo ve sloupci 8 vyplní více řádků najednou, pak teprve zpětně vyplňuje hodnoty ve sloupcích 11,12. V ten okamžik výpočet samozřejmě proběhne opět pouze u posledního řádku.

Moc by se mi hodilo, kdyby bylo možné vyplnit hodnotu ve sloupci 8 v kterémkoliv řádku a výpočet by proběhl korektně.
Activecell.row jsem zkoušela, ale nevyhovuje, protože po vyplnění hodnot ve sloupcích 11, 12 dá polovina uživatelů enter, čímž odskočí o řádek níže a výpočet již také neproběhne.
Prosím zkušenější o nápad, jak tyto situace ošetřit...
Plus ještě jedna věc, nepřišla jsem na to, jak makro přepsat tak, aby probíhalo jen v tabulce, tj. bez záhlaví, od řádku 8. Ošetřila jsem to podmínkou na hlavičku daného sloupce, ale to samozřejmě není moc čisté řešení.
Moc díky za pomoc.

Kód: Vybrat vše

Private Sub Worksheet_change(ByVal Target As Range)

Dim radek, sloupec_typ, sloupec_hodnota, sloupec_ks  As Variant

radek = Cells(Rows.Count, "H").End(xlUp).Row
sloupec_typ = 8
sloupec_ks = 10
sloupec_bef = 11
sloupec_after = 12
sloupec_vbi = 13
sloupec_hodnota = 14
sloupec_obj = 16
sloupec_pozn = 17


   If Cells(radek, sloupec_typ) = "typ" Then
         Application.EnableEvents = False
                Application.EnableEvents = True

    ElseIf Cells(radek, sloupec_typ) = "A" Then
         Application.EnableEvents = False
        ActiveSheet.Unprotect 
        ActiveSheet.Cells(radek, sloupec_ks) = "1"
        ActiveSheet.Cells(radek, sloupec_ks).Locked = True
        ActiveSheet.Cells(radek, sloupec_bef).Locked = False
        ActiveSheet.Cells(radek, sloupec_after).Locked = False
        ActiveSheet.Cells(radek, sloupec_vbi).Locked = True
        ActiveSheet.Cells(radek, sloupec_hodnota) = Cells(radek, sloupec_after) - Cells(radek, sloupec_bef)
        ActiveSheet.Cells(radek, sloupec_hodnota).Locked = True
        ActiveSheet.Protect 
        Application.EnableEvents = True
      
      
      ElseIf Cells(radek, sloupec_typ) = "B" Then
        Application.EnableEvents = False
        ActiveSheet.Unprotect 
        ActiveSheet.Cells(radek, sloupec_ks) = "1"
        ActiveSheet.Cells(radek, sloupec_ks).Locked = True
        ActiveSheet.Cells(radek, sloupec_bef).Locked = False
        ActiveSheet.Cells(radek, sloupec_after).Locked = False
        ActiveSheet.Cells(radek, sloupec_vbi).Locked = True
        ActiveSheet.Cells(radek, sloupec_hodnota) = Cells(radek, sloupec_after) - Cells(radek, sloupec_bef)
        ActiveSheet.Cells(radek, sloupec_hodnota).Locked = True
        ActiveSheet.Protect 
        Application.EnableEvents = True
        
    Else
        Application.EnableEvents = False
        ActiveSheet.Unprotect 
       ActiveSheet.Cells(radek, sloupec_ks) = "1"
        ActiveSheet.Cells(radek, sloupec_ks).Locked = True
        ActiveSheet.Cells(radek, sloupec_bef).Locked = True
        ActiveSheet.Cells(radek, sloupec_after).Locked = True
        ActiveSheet.Cells(radek, sloupec_vbi).Locked = True
        ActiveSheet.Cells(radek, sloupec_hodnota).Locked = False
        ActiveSheet.Protect 
        Application.EnableEvents = True
    End If    

End Sub
guest

Re: Excel - Makro bez cyklu pro výpočet v kterémkoliv řádku

Příspěvek od guest »

To je na půl hodiny vysvětlování...

Pracovat je potřeba s Target, resp. Selection, porovnávat adresu sledované oblasti s Target (technika Union, Intersect), vzít si kolekci Cells a projít jí (For Each ... Next)

Můžeme pořešit soukromě s tím, že pošlete daný sešit a ještě jednou vysvětlíte, co to má dělat. A ne že mi vezmete tužku :-)
Odpovědět
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Rozdělení sítě na podsítě, výpočet podsítí podle počtu hostů
    od zuzana3 » » v Administrace sítě
    12 Odpovědi
    9056 Zobrazení
    Poslední příspěvek od petr22
  • Přechod z Excel 21 na Excel 24
    od Snekment » » v Kancelářské balíky
    2 Odpovědi
    14464 Zobrazení
    Poslední příspěvek od Snekment
  • Pohoda a excel
    od brownwld » » v Kancelářské balíky
    1 Odpovědi
    7386 Zobrazení
    Poslední příspěvek od atari
  • Excel 2016 - vzorec kombinace podmínek
    od MK_Vs » » v Kancelářské balíky
    5 Odpovědi
    6181 Zobrazení
    Poslední příspěvek od lubo.
  • Tisk sloupců vedle sebe na A4 - Excel
    od atari » » v Kancelářské balíky
    5 Odpovědi
    5961 Zobrazení
    Poslední příspěvek od atari

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