Czyli trudna rzecz rozwiązana prostą metodą
Niedawno opisywałam już podobny przypadek, natomiast dotyczył on trochę łatwiejszej sytuacji. Chodziło bowiem o to, żeby dać użytkownikowi możliwość wpisania do jednej komórki wartości z palca, lub skorzystania z wpisanej tam formuły. Taki switch: chcę wartość, to ją wpiszę, a jak ją skasuję, to na jej miejscu pojawi się formuła. Cudo!
Wtedy jednak opisywałam sytuację, gdy w komórce ma się pojawić tylko jedna, określona formuła. Teraz natomiast chodzi o to, żeby mogły się tam pojawiać różne formuły, w zależności od komórki, którą będę edytowała. Brzmi strasznie, ale jest bardzo proste. Wymaga tylko kolumny pomocniczej i leciutkiej edycji kodu VBA, który napisałam dla poprzedniej sytuacji.
Formatkę i całą magię pokazuje ten rysunek:
Let’s go!
W rozwiązaniu, które wymyśliłam idę na łatwiznę (jak zwykle ;)). Pomyślałam sobie, że stworzę w arkuszu kolumnę (szara kolumna I), w której będą napisane formuły, które chcę odzyskać, gdy user skasuje wartość w komórce (z kolumny Jednostkowa cena netto). Tę kolumnę roboczą (I) ukryję i jedyne co makro będzie robiło innego niż poprzednio, to podbierało wartość z odpowiedniej komórki tej ukrytej kolumny. Nawet nie trudzę się, żeby wpisywało identyczną formułę. Dla użytkownika i tak to nie ma znaczenia – on chce widzieć określoną wartość :). O rety, ale sprytne 🙂
Całą modyfikacja w kodzie sprowadza się do tej jednej linijki:
Target.FormulaR1C1 = "=RC[4]"
Czyli cały kod, dla przypomnienia, wygląda tak:
Private Sub Worksheet_Change(ByVal Target As Range) Dim Zakres As Range On Error GoTo Obsluga Set Zakres = Me.Range("Ceny") If Not Intersect(Zakres, Target) Is Nothing And Target.Value = "" Then Target.FormulaR1C1 = "=RC[4]" End If Obsluga: Set Zakres = Nothing End Sub
I wszystko. Moim zdaniem efekt jest super, przy minimalnym nakładzie pracy. Czyli to, o co zazwyczaj chodzi 😉
Tutaj znajdziesz plik z rozwiązaniem do pobrania (oczywiście zawiera makra!):
A tutaj wersję wideo:
Bardzo fajny i prosty sposób. Działa zarówno na wierszach jak i na kolumnach. W jaki sposob należałoby zmienić treść VBA, żeby nadpisywanie działało w arkuszu w kilku różnych wierszach lub kilku różnych kolumnach (niestety tego nie potrafiłem wykonać)?
Cieszę się, że Ci się podoba – proste rozwiązania są najlepsze :).
Odnośnie modyfikacji na różne kolumny – tutaj trzeba już pisać warunki, np. Select Case albo If-y. Czyli jeżeli Target.Column = A then… itd.
Bardzo fajne rozwiązanie niestety mam jeden problem. Formuły wracają tylko po kasowaniu komórki backspace a nie delete. Czy można to jakość naprawić/zmienić?
Hej, na YT rozmawialiśmy 🙂