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

Was ist falsch an meinem Makro ?

Forumthread: Was ist falsch an meinem Makro ?

Was ist falsch an meinem Makro ?
07.06.2024 08:06:40
Frank1965
Ich habe folgendes in ein Makro geschrieben,
Sobald ich eine Zelle in der Spalte ausgefüllt habe und das Makro ausführe soll identische leere Zeile aber mit allen Formeln und Bedingen unter die ausgefüllte Zeile im leeren Zustand kopiert werden damit ich eine weitere Spalte ausfüllen kann. Diese Zeile ist in A7, also wenn ich A7 mit nur einem Wert ausgefüllt habe soll die neue Zeile A8 sein.
Folgendes neues Modul habe ich eingefügt :
Sub NeueZeileEinfügen(nachZeile As Long)
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Kalkulation")

With ws
.Rows(nachZeile + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
.Rows(nachZeile).Copy
.Rows(nachZeile + 1).PasteSpecial Paste:=xlPasteFormulasAndNumberFormats
.Rows(nachZeile + 1).PasteSpecial Paste:=xlPasteFormats
.Cells(nachZeile + 1, 1).Select
Application.CutCopyMode = False
End With
End Sub

Folgenden Code habe ich in MeineArbeitsmappe zur automatischen Erstellung der Zeile eingefügt
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Sh.Range("A:A")) Is Nothing Then
Dim lastRow As Long
lastRow = Target.Row
If lastRow >= 7 Then ' Beginne ab Zeile 7
Call NeueZeileEinfügen(lastRow)
End If
End If
End Sub

Beim Ausführen bekomme ich dann einen Fehler , der Debug Modus wird geatartet ich kann nichts machen und Excel wird geschlossen.
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Was ist falsch an meinem Makro ?
07.06.2024 08:38:36
GerdL
Hallo Frank,
schalte die Ereignisse ab.
Modul DieseArbeitsmappe:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)


Dim lastRow As Long

On Error GoTo fin

If Sh.Name > "Kalkulation" then Exit Sub

If Not Intersect(Target, Sh.Range("A:A")) Is Nothing Then
Application.EnableEvents = False
lastRow = Target.Row
If lastRow >= 7 Then ' Beginne ab Zeile 7
Call NeueZeileEinfügen(lastRow)
End If

End If
fin:
Application.EnableEvents = True

End Sub

Gruß Gerd
Anzeige
AW: Was ist falsch an meinem Makro ?
07.06.2024 09:34:21
Yal
Hallo Frank,

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

Application.EnableEvents = False
With Target
If .Cells.Count = 1 And .Column = 1 And .Row >= 7 Then NeueZeileEinfügen .Row
End With
Application.EnableEvents = True
End Sub


VG
Yal
Anzeige
AW: Was ist falsch an meinem Makro ?
07.06.2024 09:14:54
daniel
Hi
das Problem ist, dass sich ein Eventmakro wie das Change-Event auch selbst aufrufen kann, wenn es die entsprechende Aktion ausführt, denn hierfür ist es egal, ob der Mensch die Aktion macht oder ein Makro.
Das kann dann zu einer endlosen Kette von Selbstaufrufen führen, die solange läuft, bis die internen Speicher volllaufen.

eine Lösung für das Problem wäre, dass man, wie von Gerd gezeigt, die Ausführung der Eventmakros temporär deaktiviert,
eine andere Lösung wäre eine gezielte Abfrage, die erkennt und abbricht, wenn die Aktion vom Makro kommt, so dass der Selbstaufruf verhindert wird. Dies wäre in deinem Fall möglich, da das Makro ja immer eine ganze Zeile ändert, also könnte man das abfragen:

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

If Not Intersect(Target, Sh.Range("A:A")) Is Nothing Then
If Intersect(Target, Sh.Range("B:B")) Is Nothing Then '---- Zusätzliche Abfrage, abbrechen, wenn ganze Zeile geändert
Dim lastRow As Long
lastRow = Target.Row
If lastRow >= 7 Then ' Beginne ab Zeile 7
Call NeueZeileEinfügen(lastRow)
End If
End If
End If
End Sub


Gruß Daniel


Anzeige
AW: Was ist falsch an meinem Makro ?
07.06.2024 09:45:40
Frank1965
Vielen Dank für die Schnelle Hilfe, es Funktioniert
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken

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