Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro ändern auf Tabellenblatt

Forumthread: Makro ändern auf Tabellenblatt

Makro ändern auf Tabellenblatt
07.10.2024 10:44:57
Django
Hallo liebe Excelianer;
durch viele Informationen hier und im Archiv habe ich mir ein Makro gebastelt, dass auch funktioniert. ABER, ich weiß nicht, wie ich dieses Makro konzipieren soll, damit es nur zwei Tabellenblätter "überwacht", es wären "Kosten" und "Treibstoff".
Ich habe es auch schon versucht, das Makro so umzubenennen, dass es auf Worksheet heißt und auch in deren Tabellenblatt aufgerufen, bringt es keine Lösung.
Ich weiß keinen Rat und hoffe auf Hilfe.
Hier das Makro, dass auch funktioniert (über die komplette Datei)
Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ErsteFreieZeile As Long
If Target.Count > 1 Then Exit Sub
If Sh.Name = "Protokoll" Then Exit Sub
If Intersect(Target, Sh.Range("B7:O1000")) Is Nothing Then Exit Sub
With Sheets("Protokoll")
ErsteFreieZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(ErsteFreieZeile, 1) = Now
.Cells(ErsteFreieZeile, 2) = Sh.Name
.Cells(ErsteFreieZeile, 3) = Target.Address(0, 0)
.Cells(ErsteFreieZeile, 5) = Target.Value
.Cells(ErsteFreieZeile, 6) = Environ("Computername")
.Cells(ErsteFreieZeile, 7) = ThisWorkbook.FullName
End With
End Sub

Meine Frage:
Wie kann ich dieses Makro so aufrufen, dass es nur das Tabellenblatt "Kosten" und "Treibstoff" auflistet?

Vielen Dank
Django
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro ändern auf Tabellenblatt
07.10.2024 10:50:57
Oberschlumpf
Hi,

änder diesen Code...
If Sh.Name = "Protokoll" Then Exit Sub

...um in...


If Sh.Name > "Kosten" Or sh.Name > "Treibstoff" Then Exit Sub


Hilfts?
Kann sein, dass du das OR in AND ändern musst - probier aus.

Cio
Thorsten
Anzeige
AW: Makro ändern auf Tabellenblatt
07.10.2024 11:40:58
Yal
Hallo Django,

eine Mehrfachnennung kann gut mit einem Select Case behandelt werden:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)


If Target.Count > 1 Then Exit Sub
If Intersect(Target, Sh.Range("B7:O1000")) Is Nothing Then Exit Sub
Select Case Sh.Name
Case "Protokoll", "Treibstoff"
Application.EnableEvents = False
With Worksheets("Protokoll").Cells(Rows.Count, 1).End(xlUp) ' mit von unten kommend letzter befüllten Zelle in Spalte A
.Offset(1, 0).Value = Now '1 Zeile tiefer, gleiche Spalte
.Offset(1, 1).Value = Sh.Name '1 Zeile tiefer, eine Spalte nach rechts
.Offset(1, 2).Value = Target.Address(0, 0) 'usw.
.Offset(1, 3).Value = Target.Value
.Offset(1, 4).Value = Environ("Computername")
.Offset(1, 5).Value = ThisWorkbook.FullName
End With
Application.EnableEvents = True
End Select
End Sub


Beachte, dass Du mit diesem Ereignis-Makro Daten in einem Blatt einträgst und somit eine Ereignis auslöst, was genau diese Ereignismakro hervorruft. Es bildet sich eine Endlose-Schleife. Die Lösung besteht daran, die Zelleneinträge zwischen
        Application.EnableEvents = False

...
Application.EnableEvents = True

zu platzieren. Was es bewirkt, ist selbstredend.

VG
Yal
Anzeige
AW: Makro in ändern für 2 Tabellenblaetter
07.10.2024 11:45:18
GerdL
Hallo,
ungetestet.
'Modul DieseArbeitsmappe

Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Dim ErsteFreieZeile As Long

If Target.CountLarge > 1 Then Exit Sub

If Sh.Name = "Kosten" Or Sh.Name = "Treibstoff" Then

If Not Intersect(Target, Sh.Range("B7:O1000")) Is Nothing Then
Application.EnableEvents = False
With Sheets("Protokoll")
ErsteFreieZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(ErsteFreieZeile, 1) = Now
.Cells(ErsteFreieZeile, 2) = Sh.Name
.Cells(ErsteFreieZeile, 3) = Target.Address(0, 0)
.Cells(ErsteFreieZeile, 5) = Target.Value
.Cells(ErsteFreieZeile, 6) = Environ("Computername")
.Cells(ErsteFreieZeile, 7) = ThisWorkbook.FullName
End With
Application.EnableEvents = True
End If

End If

End Sub

Gruß Gerd
Anzeige
AW: Makro ändern auf Tabellenblatt
07.10.2024 14:42:58
Django
Hallo dem Hilfeteam,
leider hat keines Eurer Makros bei mir etwas ausgelöst. Keine Daten wurden in das Tabellenblatt "Protokoll" geschrieben. Wenn ich das "alte" (wie oben schon angezeigt) nutze funktioniert alles, aber auch was in anderen Tabellenblättern innerhalb der Datei gemacht wird und das wollte ich ja nicht. Da muss ich immer die Zeilen händisch nachträglich löschen.

Leider ...

Django
Anzeige
AW: Amüsant - Djangos Todesschleife!! Nicht bemerkt??
08.10.2024 16:37:37
Piet
Hallo Django

so klappt dein Code bei mir in einer Beispieldatei. Bitte beachten: Jede Zelle wir einzeln aufgelistet!
Wäre es nicht sinnvoll im Protokoll die Zeilen von B-O aufzulisten, als jede Eingabe untereinander??

mfg Piet



Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ErsteFreieZeile As Long
If Target.Count > 1 Then Exit Sub
If Target.Value = Empty Then Exit Sub
If Sh.Name = "Treibstoff" Or Sh.Name = "Kosten" Then
If Intersect(Target, Sh.Range("B7:O1000")) Is Nothing Then Exit Sub
With Worksheets("Protokoll")
ErsteFreieZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(ErsteFreieZeile, 1) = Now
.Cells(ErsteFreieZeile, 2) = Sh.Name
.Cells(ErsteFreieZeile, 3) = Target.Address(0, 0)
.Cells(ErsteFreieZeile, 5) = Target.Value
.Cells(ErsteFreieZeile, 6) = Environ("Computername")
.Cells(ErsteFreieZeile, 7) = ThisWorkbook.FullName
End With
End If
End Sub


Anzeige
AW: Sorry, falscher Betreff, hatte mich verguckt!! oWt
08.10.2024 16:40:39
Piet
...
AW: Es gab bereits zwei funktionierende Codes im Forum
08.10.2024 16:55:12
Piet
Hallo Django

nachdem ich mir noch einmal alle Antworten der Kollegen angeschaut habe, sah ich das dir zwei funktionierende Codes vorlagen.
Der Code von GerdL entspricht meinem Code, der müsste klappen. Und Yal hatte nur einen kleinen Schreibfehler im Code!
Du hättest bei Select Case nur die Tabelle "Protokoll" durch "Treibstoff" ersetzen müssen.

Ich denke die Kollegen hier im Forum habe alle genug drauf, um Fragern fachlich kompetent helfen zu können.
Tippfehler im Code kommen auch bei mir immer wieder mal vor. Gute Frager erkennen es, und korrigieren es selbst.

mfg Piet
Anzeige
AW: Es gab bereits zwei funktionierende Codes im Forum
08.10.2024 19:12:31
Yal
Nein, nicht "Protokoll" durch "Treibstoff" sondern "Protokoll" durch "Kosten".

Habe ich übersehen. Aber ich gehe grundsächlich davon aus, dass ein Code geselen wird, bevor es zum laufen gebracht wird.
Aber da haben wir Meinungsverschiedenheit.

VG
Yal
Es müsste dich ja klar sein, ...
07.10.2024 15:13:31
Yal
... junger Padawan, dass irgendwelche -wenn auch gut gemeinte- Ratschläge aus dem Internet dir ins Hause reinflattert, immer mit höchste Vorsicht zu geniessen sei.

Regel Nr 1: immer nur auf einer Kopie arbeiten.

Wobei noch eine Regel vorangestellt werden sollte: keine Backup, kein Mitleid.

Aber genau gesehen schreibt keinen der angereichte Vorschläge irgendwo anders als aufs "Protokoll". Keine Ahnung, was sonst in deinem Code noch vorliegt.

VG
Yal

Anzeige
AW: Es müsste dich ja klar sein, ... | d.h. YAL schreibt
07.10.2024 17:20:45
Django
wahrscheinlich Quatsch und ist nicht zu verwenden ...?
So verstehe ich Deine Aussage: -wenn auch gut gemeinte- Ratschläge aus dem Internet dir ins Hause reinflattert, immer mit höchste Vorsicht zu geniessen sei.

Es gibt immer eine Kopie, gelle!

Dasnn: Keine Ahnung, was sonst in deinem Code noch vorliegt.
Das kann man deutlich lesen in der ersten Nachricht.

Hallo schauan und Oberschlumpf,
das habe ich ebenfalls geändert und wie geschrieben, es wird nichts im Tabellenblatt "Protokoll" aufgelistet.

es grüßt
Django
Anzeige
AW: Makro ändern auf Tabellenblatt
07.10.2024 15:14:12
schauan
Hallöchen,

da hat die Or - Fraktion aufs falsche Pferd gesetzt. ...
Ersetze das mal durch And und probiere damit :-) Ist doch logisch, or?
AW: Makro ändern auf Tabellenblatt
07.10.2024 15:56:00
Oberschlumpf
Moin,

ich hatte ja geschrieben, dass er es auch mal mit AND versuchen soll....nun ja...

Ciao
AW: Makro ändern auf Tabellenblatt
07.10.2024 17:41:16
schauan
Hallöchen,

hujupp :-) Der TE hat aber nicht geschrieben, ob er es gemacht hat.

@Django,

Setze in Deinem Originalcode (mit den Änderungen von Thorsten) in diese Zeile einen Haltepunkt und prüfe Target.Address:
If Intersect(Target, Sh.Range("B7:O1000")) Is Nothing Then Exit Sub



Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige