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