Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1800to1804
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

Makro Ausführung

Makro Ausführung
18.12.2020 15:25:39
Zulu
Hallo zusammen,
ich habe einen funktionierenden VBA Code. Leider läuft er nur wenn er sich auf das Tabellenblatt bezieht in welchem er steht. Könnt ihr mir ein Tipp geben wie ich ihm mitteile, dass er, wenn im bestehenden Blatt "Plan" der Bereich AP1:AW2 bearbeitet wird, das Makro im Blatt "Key" ausführen soll? Alles zwischen den gestrichelten Linien bezieht sich auf das Blatt "Key".
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim iCount As Integer
Set Target = Application.Intersect(Target, Range("AP1:AW2"))
If Target Is Nothing Then Exit Sub
On Error GoTo upsala
Application.EnableEvents = False
Worksheets("Key").Activate
For Each KeyCells In Target
Range("F52:F" & Range("F140").End(xlUp).Row).ClearContents
Cells(51, 4) = Range("D49") - Range("B49") + 1
Cells(52, 6) = Cells(49, 2)
For iCount = 0 To Cells(51, 4) - 1
Cells(52 + iCount, 6) = Cells(49, 2) + iCount
Cells(52 + iCount, 7) = "Winter BU"
Next
Next KeyCells
Application.EnableEvents = True
Exit Sub
upsala:
Application.EnableEvents = True
End Sub

Ich hoffe ich konnte darlegen was mein Prolem ist.
Danke für eure Unterstützung

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Ausführung
18.12.2020 15:34:31
Yal
Hallo Zulu,
Worksheet_Change ist ein Ereignis des Objekt Tabellenblatt. Wenn Du möchtest, dass etwas reagiert, egal in welchem Blatt, muss Du ein Ereignis der übergeordnete Elment Arbeitsmappe verwenden.
Code auschneiden,
Doppelklick auf Arbeitmappe,
Ereignis Workbook_SheetSelectionChange auswählen,
Code hineinpasten,
Parameter Sh einbauen.
VG
Yal
AW: Makro Ausführung
18.12.2020 15:49:04
Zulu
Hallo Yal,
danke für die schnelle Antwort.
Ich dachte Worksheet_Change gehört in das Tabellenblatt in welchem es auf Änderungen prüfen soll. Ich habe es somit in meinem Blatt 1. Nach ändern des Bereiches im Blatt 1 soll es den Code zwischen den gestrichelten Linien ausführen. Diese Zellen sind alle im Blatt 2.
Ich kann mit deiner Ausführung leider nichts anfangen. Meine VBA Fähigkeiten sind doch stark begrenzt...
Grüße
Anzeige
AW: Makro Ausführung
18.12.2020 16:10:04
Yal
Hallo Zulu,
ja, da hast Du recht. Ein Ereignis auf Blatt1 soll vom Blatt1 behandelt werden.
Dieses Blatt-Coding kann auch in ein anderen Blatt wirken, aber Du muss dem Code sagen, auf welche.
Und da habe ich Schwierigkeit mit dem gegebenen Code: was davon soll sich auf dem Blatt "Key" und was auf dem Blatt "Plan" beziehen?
VG
Yal
AW: Makro Ausführung
18.12.2020 16:14:49
Zulu
Im Blatt Plan, wo auch das Makro steht, soll nur der genannte Bereich auf Änderungen überwacht werden.
Wenn eine Änderung durchgeführt wird soll folgender Teil vom Makro im Blatt Key durchgeführt werden:
For Each KeyCells In Target
Range("F52:F" & Range("F140").End(xlUp).Row).ClearContents
Cells(51, 4) = Range("D49") - Range("B49") + 1
Cells(52, 6) = Cells(49, 2)
For iCount = 0 To Cells(51, 4) - 1
Cells(52 + iCount, 6) = Cells(49, 2) + iCount
Cells(52 + iCount, 7) = "Winter BU"
Next
Next KeyCells
Grüße
Anzeige
AW: Makro Ausführung
18.12.2020 16:23:00
Werner
Hallo,
For Each KeyCells In Target
With Worksheets("Plan")
.Range("F52:F" & .Range("F140").End(xlUp).Row).ClearContents
.Cells(51, 4) = .Range("D49") - .Range("B49") + 1
.Cells(52, 6) = .Cells(49, 2)
For iCount = 0 To .Cells(51, 4) - 1
.Cells(52 + iCount, 6) = .Cells(49, 2) + iCount
.Cells(52 + iCount, 7) = "Winter BU"
Next iCount
End With
Next KeyCells
Gruß Werner
AW: Makro Ausführung
18.12.2020 16:30:33
Yal
Hallo Werner,
habe ich zuerst auch so gedacht, aber was nutzt denn eine Schleife über Target.Cells, wenn innerhalb der Schleife null Bezug auf die ändernde Werte der Schleifen-Variablen?
Das ergibt keinen Sinn und kann nicht der Absicht des PRogrammieres darstellen.
VG
yal
Anzeige
AW: Makro Ausführung
18.12.2020 16:39:02
Werner
Hallo,
tja, die gleichen Fragezeichen hatte ich auch vor meinem Kopf schweben. Völlig sinnlose Schleife. Wird halt zigmal das selbe produziert. Der Sinn dahinter erschließt sich mir leider auch nicht.
Jetzt hat der Beitragsersteller zumindest mal einen Code, der aufzeigt, wie man Zellen auf einem anderen Blatt ansprechen kann. Der Rest ist Schweigen.
Gruß Werner
AW: Makro Ausführung
18.12.2020 16:48:38
Zulu
Hallo,
Werner dein Code läuft!
Wie gesagt bin ich nicht wirklich fit im VBA und somit kann ich mit den von euch beschriebenen Sachverhalt wenig anfangen. Ich habe die Datei mal im Anhang. Ich denke mit dieser wird euch klarer was mein Ziel ist. Ob meine Umsetzung sinnvoll ist weiß ich nicht ;-)
Kann ich die zweite For Schleife einfach unter die erste schreiben?
https://www.herber.de/bbs/user/142432.xlsm
Grüße
Anzeige
AW: Makro Ausführung
18.12.2020 17:31:49
Yal
Mit Verlaub: der Code läuft (es gibt keine Fehlermeldung), aber Wirkung hat es keine.
Du bekommst übrigens den Titel "Spass-Vogel des Tages":
Du sagst die Lösung funktioniert und liefert eine Excel, wo den entsprechenden Code nicht mal drin ist!
Du kannst darunter jegliche For-Schleife schreiben, aber sie an die Wand zu malen, wird sicher mehr Wirkung haben (spätestens bei der Frau des Hauses, bei Home Office. Ne, Spass. Diesmal bin ich dran ;-)
Kläre uns bitte:
_ was muss wo gelesen werden
_ wo muss es geschireben werden
Haus-Aufgabe: überall in folgende Coding, wo ein Ausdruck mit einem Punkt mit nichts davor anfängt,
entweder P (für Plan) oder K (für Key) einsetzen:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("AP1:AW2")) Is Nothing Then
Application.EnableEvents = False
Plan_einrichten
Application.EnableEvents = False
End If
End Sub
Private Sub Plan_einrichten()
Dim iCount As Integer
Dim K As Worksheet
Dim P As Worksheet
Set K = Worksheets("Key")
Set P = Worksheets("Plan")
.Range("F52:F" & .Range("F140").End(xlUp).Row).ClearContents
.Cells(51, 4) = .Range("D49") - .Range("B49") + 1
.Cells(52, 6) = .Cells(49, 2)
For iCount = 0 To Cells(51, 4) - 1
.Cells(52 + iCount, 6) = .Cells(49, 2) + iCount
.Cells(52 + iCount, 7) = "Winter BU"
.Cells(76 + iCount, 6) = .Cells(55, 2) + iCount
.Cells(76 + iCount, 7) = "Sommer BU"
Next
.Cells(57, 4) = .Range("D55") - .Range("B55") + 1
.Cells(76, 6) = .Cells(55, 2)
End Sub
.Range("B55") und .Cells(55, 2) sind in beide Fälle die Zelle B55.
Bonus-Frage: Gibt es einen Grund, warum die Eingabe in den Spalte AP:AW vorliegen, anstatt in A:D ?
Viele Grüße
Yal
Anzeige
AW: Makro Ausführung
19.12.2020 11:33:34
Zulu
Hallo,
danke für die Rückmeldung.
Der Bereich wurde gewählt weil in der Originaldatei die Spalten davor mit anderen Daten belegt sind.
Ich habe den Code jetzt entsprechend angepasst. Leider startet er nicht wenn ich eine Änderung im definierten Bereich vornehme.
Woran liegt das?
https://www.herber.de/bbs/user/142438.xlsm
Grüße
AW: Makro Ausführung
19.12.2020 19:40:40
Yal
Hallo Zulu,
wenn die Ereignis-Procedure nicht feuern, liegt es meistens daran, dass man den Code in Schritt für Schritt Modus durchgegangen ist und abgebrochen, bevor das Event-Restart stattgefunden hat.
Tippe einfach
Application.EnableEvents = True

in das Direkt-Fenster, dann läuft alles wieder.
Deine neue Datei
https://www.herber.de/bbs/user/142438.xlsm
ist leider genau dieselbe wie die alte
https://www.herber.de/bbs/user/142432.xlsm
Es passiert nichts (auch nachdem die Events reaktiviert wurden)
Allgemein: Don't repeat yourself
Du hast zweimal dieselbe Coding in den Blätter Plan und Key. Das bringt nichts und macht das gesamt schwer zu warten. Du willst eigentlich nur, dass etwas passiert, wenn in Plan!AP1:APW1 geändert wurde, also reicht die Ereignis-Procedure in "Plan"-Code.
Solltest Du das Coding aus 2 verschiedenen Stellen angestossen haben wollen, siehe den Code in
https://www.herber.de/forum/messages/1800656.html
Die Ereignis-Procedure darf in so ein Fall in jede Blatt sein, also doppelt, aber dafür minimalistisch. Bedingung für Intersect werden dabei anders sein. Die Sub "Plan_einrichten" darf es nicht doppelt geben, lege diese in einem Modul. Wenn etwas an diesem Sub zu ändern ist, muss Du nur eine Stelle anfassen.
Hut ab, dass Du dich an der Bewältigung deine Aufgaben mit VBA ranmachst, aber Dir fehlen grundlegende Wissen über verschiedene Zusammenhänge, die deinen Fortschritt im Weg stehen. Diese sind leider nicht übers Forum vermittelbar.
Excel VBA Tutorial gibt leider wie Sand am Meer. Scienzless schient einige gute Themen zu haben:
https://www.youtube.com/playlist?list=PLfrK06gExlYhVLUPhJh1ilsyeOVdzG4Uk
Deine Frage zur Gültigkeitbereich von Variable wäre hier angesprochen:
https://www.youtube.com/watch?v=gAEtr3tbN8g
Ideal wäre für Dich ein persönliches Coatching, aber wenn Du keinen Bekannte hast, der unterstützen kann, geht es nur über kaufen (wie günstig/teuer es ist, weiß ich leider nicht).
Viel Erfolg
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige