Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Bei Verlassen einer Zelle Aktion per Makro ausführen
#1
Guten Morgen, Excelbeführworter,

ich betreibe mit meinen Kollen eine Excel Datei (2013), in der Vorgänge in der Art einer Datenliste erfasst werden.
Spalte A: Eingangsdatum wird manuell erfasst.
In Spalte F wird bei Eingangsdatum <>"" eine fortlaufende Nummer erzeugt. 
Etliche andere Spalten: (interessieren hier nicht)

Jetzt kommt es vor, dass unachtsame Kollegen in irgendeiner anderen Spalte eine Sortirung mit dem Autofiltersymbol veranlassen, ohne vorher die Formeln in Festwerte umzuwandeln.
Ich würde nun gerne ein Macro installieren, welches immer beim Verlassen der Zelle in Spalte A (Eingangsdatum manuell) in der Zelle der Spalte F die erzeugte fortlaufende Nummer in einen Festwert umwandelt.

das eigentliche Umwandeln der Formel in eine Zahl habe ich so gelöst (Macroaufzeichnung des manuellen Vorgans):

Sub Formel_umwandeln()

'
' Formel_umwandeln Makro
'
    Range("F415").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

Aber mir fehlt das Können, den Vorgang an das Verlassen der Zelle A zu koppeln.

Ich wäre Dankbar für Eure Hilfe.

MFG
Antworten Top
#2
Hallo,

folgender Code kommt in das schon vorhandene VBA-Modul des entsprechenden Tabellenblattes:
Private Sub Worksheet_Change(ByVal Target As Range)
 With Target.Cells(1)
   If .Column = 1 Then
     If IsDate(.Value) Then
       With .Offset(0, 5)
         If .HasFormula Then
           .Value = .Value
         End If
       End With
     Else
       '.Offset(0, 5).Formula = "" ' wieder die Formel eintragen
     End If
   End If
 End With
End Sub
Gruß Uwe
Antworten Top
#3
Danke Uwe,
ich probier das nachher gleich mal aus.
Antworten Top
#4
Danke nochmal, Uwe, 

das Ding funktioniert.
Ich habe nur noch nicht kapiert, an welcher Stelle die neue fortlaufende Nummer erzeugt wird. Ich sehe keine Formel oder Ausdruck, die den vorherigen Wert um 1 erhöht.

Das gleiche Macro mit Änderung würde ich jetzt gerne auch noch an einer anderen Stelle benützen:
In der Zelle der Spalte Y wird ein Wert aus einer Datenmatrix gesucht, abhängig von einem Mitarbeiternamen in der Zelle der Spalte V.
Die Formel dort lautet: =WENNFEHLER(WENN(I418="In";INDEX(Stammdaten!$D$3:$H$101;VERGLEICH(V418;Fachberater;0);VERGLEICH(A418;Stammdaten!$D$2:$I$2;1));Q418);"x")
Die Gebietszuordnung von AD-Mitarbeitern kann sich über die Jahre ändern. Das zur Zeit der Erfassung richtige Gebiet soll aber in der Tabelle erhalten bleiben. Deswegen soll auch hier die Formel in einen Festwert umgewandelt werden.

Diese Formel bekomme ich wohl nicht so elegant in das Macro eingearbeitet?
Antworten Top
#5
(19.04.2018, 11:36)christo_f schrieb: Ich habe nur noch nicht kapiert, an welcher Stelle die neue fortlaufende Nummer erzeugt wird. Ich sehe keine Formel oder Ausdruck, die den vorherigen Wert um 1 erhöht.
Das weiß ich auch nicht.  :17:

(19.04.2018, 11:36)christo_f schrieb: Das gleiche Macro mit Änderung würde ich jetzt gerne auch noch an einer anderen Stelle benützen:
In der Zelle der Spalte Y wird ein Wert aus einer Datenmatrix gesucht, abhängig von einem Mitarbeiternamen in der Zelle der Spalte V.
Private Sub Worksheet_Change(ByVal Target As Range)
 With Target.Cells(1)
   If .Column = 1 Then
     With .Offset(0, 5)
       .Value = .Value
     End With
   ElseIf .Column = 22 Then
     With .Offset(0, 3)
       .Value = .Value
     End With
   End If
 End With
End Sub

Gruß Uwe
Antworten Top
#6
Danke Uwe,
ich melde mich am Montag wieder, ob es geklappt hat.
Antworten Top
#7
Haallo UWE,
bin total begeistert,
klappt, vielen Dank.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste