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

wilma
nováček
Příspěvky: 1
Registrován: květen 17
Pohlaví: Žena
Stav:
Offline

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

Příspěvekod wilma » 10 kvě 2017 09:17

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

Reklama
guest
Pohlaví: Nespecifikováno

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

Příspěvekod guest » 10 kvě 2017 17:58

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


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Excel - výpočet nočních hodin Příloha(y)
    od Uziv00 » 17 říj 2024 11:22 » v Kancelářské balíky
    3
    3399
    od lubo. Zobrazit poslední příspěvek
    24 říj 2024 00:00
  • Rozdělení sítě na podsítě, výpočet podsítí podle počtu hostů Příloha(y)
    od zuzana3 » 27 pro 2024 08:09 » v Administrace sítě
    12
    4834
    od petr22 Zobrazit poslední příspěvek
    27 pro 2024 12:29
  • EXCEL -jak otevřít 2 excel sobory abych je viděla současne a samostatně
    od Ketty02 » 30 srp 2024 21:19 » v Vše ostatní (sw)
    2
    4888
    od Riviera kid Zobrazit poslední příspěvek
    02 zář 2024 16:21
  • Přechod z Excel 21 na Excel 24
    od Snekment » 29 led 2025 13:46 » v Kancelářské balíky
    2
    12298
    od Snekment Zobrazit poslední příspěvek
    29 led 2025 15:05
  • Pohoda a excel Příloha(y)
    od brownwld » 06 kvě 2025 17:28 » v Kancelářské balíky
    1
    4995
    od atari Zobrazit poslední příspěvek
    07 kvě 2025 09:41

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

Kdo je online

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