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 Sub
Makro działające w Excelu tutaj
Brak komentarzy:
Prześlij komentarz