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 text na konec více řádků najednou Příloha(y)
    od Myerina » 03 led 2024 11:51 » v Kancelářské balíky
    5
    780
    od Zivan Zobrazit poslední příspěvek
    04 led 2024 09:42
  • Kopírování řádků s funkcí když Příloha(y)
    od Martyn20 » 20 črc 2023 16:50 » v Kancelářské balíky
    3
    1787
    od Melvidor Zobrazit poslední příspěvek
    21 črc 2023 08:41
  • Ukotvení prvního a posledního řádku v tabulce.
    od Kopusek » 13 pro 2023 10:50 » v Kancelářské balíky
    2
    1413
    od Kopusek Zobrazit poslední příspěvek
    14 pro 2023 08:55
  • Makro pro myš Rapture Python
    od mmmartin » 27 srp 2023 15:18 » v Problémy s hardwarem
    9
    1111
    od mmmartin Zobrazit poslední příspěvek
    29 srp 2023 16:47
  • Excel a OneDrive
    od sginfo » 11 zář 2023 15:28 » v Kancelářské balíky
    16
    5984
    od mirekol Zobrazit poslední příspěvek
    20 říj 2023 08:31

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

Kdo je online

Uživatelé prohlížející si toto fórum: elninoslov a 7 hostů