Anzeige
Archiv - Navigation
1424to1428
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Schleifen

Schleifen
07.05.2015 16:41:42
Karmann
Hallo Zusammen!
Zwei Fragen!
Der beinhaltete VBA Code fügt ein aktuelles Datum zwei Spalten weiter ein, sobald in Spalte B irgendetwas drin steht.
1. Warum funktioniert das nur auf dem ersten Tabellenblatt und wie muss der Code aussehen, damit diese Funktion auf jedem Tabellenblatt funktioniert?
2. Wie müsste der Code lauten, wenn ich das auch noch in Spalte E mit Datumsausgabe in Spalte G haben möchte? Oder sogar in weiteren Spalten?
Wäre euch sehr dankbar!
https://www.herber.de/bbs/user/97518.xlsm

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleifen
07.05.2015 18:33:06
Klaus
Hallo Karman,
was hat das mit Schleifen zu tuen?
Der Code funktioniert nur in Tabelle1, weil er in Tabelle1 steht ... Der Turbolader in meinem SAAB funktioniert ja auch nicht in meinem Toyota :-)
Was macht das einsame "Next" mitten im Code?
Du prüfst zuerst Spalte B. Falls da nichts zutrifft, verlässt du mit "Exit Sub" den Code. Ergo: Der zweite Teil des Code hat keine Chance, jemals ausgeführt zu werden. Packe das ganze stattdessen in IF-Blöcke. Stupide ginge das so:
Private Sub Worksheet_Change(ByVal Target As Range)
'If Intersect(Target, Range("B1:B100")) Is Nothing Then Exit Sub
If Not Intersect(Target, Range("B1:B100")) Is Nothing Then
If Target.Value  "" Then
Target.Offset(0, 2).Value = Date
Else
Target.Offset(0, 2).ClearContents
End If
End If
'If Intersect(Target, Range("e1:e100")) Is Nothing Then Exit Sub
If Not Intersect(Target, Range("E1:E100")) Is Nothing Then
If Target.Value  "" Then
Target.Offset(0, 2).Value = Date
Else
Target.Offset(0, 2).ClearContents
End If
End If
End Sub
Aber dann musst du den Code ständig wiederholen - wenn du ihn dann auf 3, 5 oder 70 Spalten erweiterst pflegst du dir einen Wolf, sobald sich etwas ändert. Besser (nur einer von vielen Ansätzen): Lege einen boolean-Schalter um, der dann den Code ausführt oder nicht. Ungetestet:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MacheDatum As Boolean
MacheDatum = False
If Not Intersect(Target, Range("B1:B100")) Is Nothing Then MacheDatum = True
If Not Intersect(Target, Range("E1:E100")) Is Nothing Then MacheDatum = True
If MacheDatum Then
If Target.Value  "" Then
Target.Offset(0, 2).Value = Date
Else
Target.Offset(0, 2).ClearContents
End If
End If
End Sub
Wieder die stupide Lösung: Kopiere diesen Code in jedes Blatt, in dem der Code wirken soll.
Grüße,
Klaus M.vdT.

Anzeige
AW: Schleifen
07.05.2015 19:27:01
Daniel
Hi
damit der Code in jedem Blatt läuft, muss folgendes Makro ins Modul "DieseArbeitsmappe"
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
du hast mit Worksheet_Change die falsche Bezeichung verwendet, diese Bezeichnung für das Change-Event gilt nur in den Tabellenblattmodulen und dann läuft der Code natürlich nur, wenn im entsprechendne Blatt eine Änderung passert, dh du müsstest dann den Code in jedem Tabellenblattmodul wiederholen.
wenn der Code auch für mehre Spalten gelten soll, musst du irgendwie definerten, wie der Code erkennen soll, ob er weiter laufen soll oder nicht.
der folgende Code prüft bei einer Änderung ob in der Zeile 1 der jeweiligen Spalte der Text "Erledigt" steht und führt ihn dann aus.
Dh für Spalte E funktioniert das automatisch mit, weitere Spalten kannst du hinzunehmen, indem du "Erledigt" in sie Spaltenüberschrift schreibst (Zeile 1)
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Zelle As Range
For Each Zelle In Intersect(Target, Sh.UsedRange)
If Zelle.Value  "" Then
Select Case Zelle.Offset(1 - Zelle.Row, 0).Value
Case "Erledigt"
Application.EnableEvents = False
Zelle.Offset(0, 2).Value = Date
Application.EnableEvents = True
Case Else
End Select
End If
Next
End Sub
Gruß Daniel

Anzeige
AW: Schleifen
07.05.2015 23:14:25
Karmann
Vielen, vielen Dank an Klaus und Daniel!
Beide Lösungen funktionieren sehr gut!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige