W formatce Excela edycja kolumny x powoduje wyliczenie w kolumnie y, a jeżeli zacznie edytować komórkę y, będzie wyliczona komórka x.
Jak zaspokoić taką potrzebę? Wstępnie zastanawiam się nad zastosowaniem VBA i on change.
- jeżeli edytowana jest komórka w kolumnie x, wstaw formułę w kolumnie y.
- jeżeli użytkownik edytuje komórkę w kolumnie y, wstaw formułę w kolumnie x.
Czy to dobry kierunek? Obawiam się trochę, że powstaną "circular references" - zapętlone formuły. Jak tego uniknąć?
Oczywiście sam nie pozostanę bezczynny i postaram się przez weekend poeeksperymentować ale bardzo byłbym wdzięczny za wszelkie odpowiedzi.
EDIT: Oto co osiągnąłem przez weekend:
Private oListObj As ListObject Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Set oListObj = Worksheets("PROFORMA PLN").ListObjects("TableA") Application.EnableEvents = True If Not Intersect(Target, oListObj.ListColumns("CENA OFEROWANA NETTO").DataBodyRange) Is Nothing Then Application.EnableEvents = False Target.Formula = Target.Value Application.EnableEvents = True End If If Not Intersect(Target, oListObj.ListColumns("OFEROWANY RABAT").DataBodyRange) Is Nothing Then Application.EnableEvents = False Target.Formula = Target.Value Application.EnableEvents = True End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) Set oListObj = Worksheets("PROFORMA PLN").ListObjects("TableA") Application.EnableEvents = True If Not Intersect(Target, oListObj.ListColumns("CENA OFEROWANA NETTO").DataBodyRange) Is Nothing Then Application.EnableEvents = False Target.Offset(0, 6).Formula = "=IF([@[CENA OFEROWANA NETTO]]<>"""", -([@[CENA OFEROWANA NETTO]]-[@[CENA KATALOGOWA ZA 1 SZT]])/[@[CENA KATALOGOWA ZA 1 SZT]],"""")" Application.EnableEvents = True End If If Not Intersect(Target, oListObj.ListColumns("OFEROWANY RABAT").DataBodyRange) Is Nothing Then Application.EnableEvents = False Target.Offset(0, -6).Formula = "=IF([@[Descr]]<>"""",[@[CENA KATALOGOWA ZA 1 SZT]]-([@[CENA KATALOGOWA ZA 1 SZT]]*[@[OFEROWANY RABAT]]),"""")" Application.EnableEvents = True End If End SubMakro działające w Excelu tutaj
Brak komentarzy:
Prześlij komentarz