[excel]Marker setzen

  • #1
P

PCDjoe

Bekanntes Mitglied
Themenersteller
Dabei seit
01.08.2001
Beiträge
4.143
Reaktionspunkte
0
Ort
31638 Stöckse
Ola,

ich hab mal wieder Bedarf an einem kleinen Makro.
Ich schreibe eine lange Excel Tabelle nach unten weiter. Der Eintrag erfolgt immer am Ende in Spalte B. Immer wenn dort etwas eingegeben wird, soll die Formel in Spalte C aus der Zelle oben drüber in die Zelle der Zeile eingefügt werden. DAs ist aber nur für den Komfort und nicht gar so wichtig.

Das eigentliche Anliegen ist die Spalte D: Wenn der Inhalt einer bestehenden Zelle (Also kein ersteintrag, die Zelle ist also vorher nicht leer und steht nicht in der neu hinzukommenden Zeile) geändert wird, soll in der Zelle daneben (spalte E) das aktuelle Datum erscheinen.

Ich hatte schon angefangen ... aber dann aufgegeben wegen ständiger Unterbrechung ;)
 
  • #2
PCDjoe schrieb:
Das eigentliche Anliegen ist die Spalte D: Wenn der Inhalt einer bestehenden Zelle (Also kein ersteintrag, die Zelle ist also vorher nicht leer und steht nicht in der neu hinzukommenden Zeile) geändert wird, soll in der Zelle daneben (spalte E) das aktuelle Datum erscheinen.

Ich hatte schon angefangen ... aber dann aufgegeben wegen ständiger Unterbrechung ;)

Hallo PCDjoe

Zu D ändern in E das Datum:Teste einmal folgendes Makro im betroffenen Tabellenblatt.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
     Dim RaBereich As Range, RaZelle As Range
     Set RaBereich = Range(D:D)->Bereich anpassen
     Application.EnableEvents = False
     For Each RaZelle In Range(Target.Address)
           If Not Intersect(RaZelle, RaBereich) Is Nothing Then RaZelle.Offset(0, 1) = Date
           Columns(E).EntireColumn.AutoFit->Spalte E auf Optimale Breite einstellen
     Next RaZelle
     Application.EnableEvents = True
     Set RaBereich = Nothing
End Sub

Edit:
Sorry PCDjoe

Makro schreibt bei Änderung einer Zelle der Spalte D immer daneben in E der gleichen Zeile das aktuelle Datum, war ich wohl zu schnell.

Hilft dir auch folgende Änderung im Makro weiter?

Statt:

      If Not Intersect(RaZelle, RaBereich) Is Nothing Then RaZelle.Offset(0, 1) = Date

Ändern in:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
     Dim RaBereich As Range, RaZelle As Range
     Set RaBereich = Range(D:D)->Bereich anpassen
     Application.EnableEvents = False
     For Each RaZelle In Range(Target.Address)
           If Not Intersect(RaZelle, RaBereich) Is Nothing Then RaZelle.Offset(0, 1) = Now: _
           RaZelle.Offset(0, 1).NumberFormat = dd/mm/yyyy hh:mm:ss->Datum/Uhrzeit in E eintragen
           Columns(E).EntireColumn.AutoFit->Spalte E auf Optimale Breite einstellen
     Next RaZelle
     Application.EnableEvents = True
     Set RaBereich = Nothing
End Sub

Gruß Karl
 
  • #3
Ola,

elegante Lösung, ich bin gespannt, wie es geht .... Erst mal danke, teste ich Montag ;-)
 
  • #4
Hallo PCDjoe

Jetzt hatte ich noch etwas Zeit zum Basteln, da ich in letzter Zeit wenig neue Makros erstelle, na ja, Du kennst das ja.

Mit Hilfsspalte F Notfalls Ausblenden und 2 Makros im Tabellenblatt müßte es gehen,
zumindest war ich fürs erste zufrieden mit dem Makroablauf.

Beim Klick in Spalte D wird der Wert von D in Spalte F übernommen
Nach ändern von D wird F abgefragt ob F ist, dann wird D mit F verglichen.
wenn Spalte F nicht sichtbar sein soll, dann Spalte F bitte vor Makroeinkopieren Ausblenden

Wenn D (noch leer war)  kein Eintrag
Wenn D nicht leer war aber ungleich F dann Datum und Uhrzeit in E

Teste
Notfalls noch etwas anpassen!

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'   Application.ScreenUpdating = False-> Bildschirm Aktualisierung AUS
   Dim RaBereich As Range, RaZelle As Range
   Set RaBereich = Range(D:D)->Bereich anpassen
   Application.EnableEvents = False
   For Each RaZelle In Range(Target.Address)
       If Not Intersect(RaZelle, RaBereich) Is Nothing Then RaZelle.Offset(0, 2) = Intersect(RaZelle, RaBereich)
       Next RaZelle
       Application.EnableEvents = True
       Set RaBereich = Nothing
'       Application.ScreenUpdating = True-> Bildschirm Aktualisierung wieder EIN
End Sub

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'      Application.ScreenUpdating = False-> Bildschirm Aktualisierung AUS
      Dim RaBereich As Range, RaZelle As Range
      Set RaBereich = Range(D:D)->Bereich anpassen
      Application.EnableEvents = False
      For Each RaZelle In Range(Target.Address)
      If Not Intersect(RaZelle, RaBereich) Is Nothing _
      And RaZelle.Offset(0, 2) > _
      And RaZelle.Offset(0, 2) <> RaZelle _
      Then RaZelle.Offset(0, 1) = Now: _
      RaZelle.Offset(0, 1).NumberFormat = dd/mm/yyyy hh:mm:ss: _
      Columns(E).EntireColumn.AutoFit->Datum/Uhrzeit in Spalte E & Zelle Formatieren & Spalte E Optimale Breite
   Next RaZelle
   Application.EnableEvents = True
   Set RaBereich = Nothing
'   Application.ScreenUpdating = True-> Bildschirm Aktualisierung wieder EIN
End Sub

Ps.
Wird eine Spalte Komplett Markiert, z.B bei klick auf Spaltenkopf A,
gibt es eine längere Wartezeit, bei Teilmarkierung einer Spalte alles OK,
desshalb Zeile F vorher Ausblenden. wenn gewünscht.

Bitte
       Application.ScreenUpdating = False-> BildschirmAktualisierung AUS
und
       Application.ScreenUpdating = True-> BildschirmAktualisierung EIN

erst Aktivieren, wenn Makro zufriedenstellend läuft, verkürzt dann die Wartezeit beim Markieren von Zellen.


Hoffe hilft dir weiter!
Gruß Karl
 
  • #5
PCDjoe schrieb:
Ola,

elegante Lösung, ich bin gespannt, wie es geht .... Erst mal danke, teste ich Montag ;-)

Hallo PCDjoe

Posting vom 07.01.07 um 18:34:35 getestet?

Gruß karl
 
  • #6
Ola,

sorry, das hatte ich wegen eines per Mail von Matjes gekommenen Makros nícht mehr gesehen und dann auch keine Benachrichtigung mehr erhalten.
Tut mir leid, dass ich das ignoriert habe, ist mir echt peinlich.
Und eben hatte ich gar nicht so weit nach unten geschaut, weil ich dachte, du würdest meinen erst favorisiert er Funktionen und dann will er selber Makros

Auch wenn es den Lapsus nicht besser macht, ich hab neben der Arbeit nur mit einem Auge draufgeschaut,

Entschuldigung angenommen?
Ich teste gleich noch, ich hab die Tabelle grad in Arbeit.
 
  • #7
Ola,

nun aber ;-)
danke, funktioniert tadellos.
Matjes hat die Sache mit der Hilfsspalte daruch umgangen, dass er gleich ein verborgenes Blatt genommen hat. Wie er dabei hinbekommen hat, dass die Prüfung auch dann noch funktioniert, wenn die ursprüngliche Tabelle neu sortiert wird, ist mir ein Rätsle geblieben.

Insofern hat Deine Lösung den Vorteil, dass alles zu sehen ist: Den alten Inhalt, den neuen Inhalt und die Änderungszeit.
Auch die Tatsache, dass die Hilfspalte bewusst mit sortiert werden kann, hat für mich Vorteile.
Nachteilig ist:
- dass bei einem weiteren Klick in eine schon veränderte Zelle der Inhalt verändert wird.
- das das Makro auch reagiert, wenn mehr als eine Zelle markiert wird.

Aber das ist bei Bedienung Gewöhnungssache und tut der Funktion keinen Abbruch.

Ein großes Danke und noch mal eine Entschuldigung hinterher.
 
  • #8
Hallo PCDjoe

Entschuldigung angenommen!

Es steckt ja immer mehr oder weniger Zeit, welche man selbst aufwendet um zu Helfen.
Als Gegenzug erwartet man Natürlich auch eine Antwort.

Richtig ist auch, man kann in der Eile auch einmal etwas Übersehen.

Wenn dann die Antwort (danke, funktioniert tadellos.) zurück kommt, hilft es dem einen oder anderen ebenfals weiter!

Und für einem selbst, ist es eine kleine Anerkennung!

Gruß Karl
 
Thema:

[excel]Marker setzen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben