• Zapisz się do newslettera, aby otrzymywać powiadomienia o nowościach na blogu
    Zapisując się, wyrażasz zgodę na przesyłanie Ci informacji o nowościach na tym blogu. Zgodę możesz w każdej chwili wycofać (szczegóły).

Odzyskiwanie różnych formuł po nadpisaniu ich wartością

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:

Formatka

Formatka

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:

 

 

Spodobał Ci się ten artykuł?

Jeśli TAK, zapisz się na newsletter, aby otrzymywać powiadomienia
o o nowościach na blogu.

Zapisując się, wyrażasz zgodę na przesyłanie Ci informacji o nowościach na tym blogu. Zgodę możesz w każdej chwili wycofać (szczegóły).

Tagi , , , , , , , , , , , , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *