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

Change Methode "unterdrücken"

Change Methode "unterdrücken"
22.12.2017 08:04:15
Nati
Hi zusammen,
eine Sub kopiert eine Zeile und fügt diese Zeile 50x unterhalb wieder ein, dabei wird der ganze Inhalt der 50 Zeilen gelöscht.
in der Spalte E wird allerdingt eine Change Methode ausgeführt, die besagt, dass falss man den Wert in Spalte E setzt dieser im Nachhinein nicht mehr geändert wird (ganz normale msgbox)
--> Wenn ich nun diese Zeile kopiere und in E etwas drin steht, dann führt es mir diese Methode 50x aus.... (momentan lösche ich immer den wert in Spalte E in der zu kopierenden Zeile, aber der Wert muss natürlich bleiben...
wie unterdrücke ich dieses Event?
Code:
Sub fuenfzigNeueZeilen()
Application.EnableEvents = False
Dim Zelle As Range
Dim letzteZeile As Long
Dim ws As Worksheet
Dim copZeil As Long
Set ws = Worksheets("Project Schedule")
ws.Unprotect "report"
Application.ScreenUpdating = False
ws.Rows(16).Locked = False
'copZeil = ws.Rows(16)
If ws.Range("B16") = 0 Then
MsgBox "You have to fill in data in cell -B16- to add new lines!", vbInformation + vbOKOnly
Exit Sub
End If
Rows(16).Copy
letzteZeile = ws.Range("B1048576").End(xlUp).Row
MsgBox letzteZeile
'sonst wird jedes mal die selection.change Methode ausgeführt
ws.Rows(16).Range("E16").Clear
ws.Rows(16).EntireRow.Copy
If Cells(16, 5)  "" Then Cells(ActiveCell.Row + 1, 5) = ""
ws.Rows(letzteZeile + 1 & ":" & letzteZeile + 50).Insert Shift:=xlDown
For Each Zelle In ws.Range(ws.Cells(letzteZeile + 1, 1), ws.Cells(letzteZeile + 50, 255). _
End( _
xlToLeft))
If Not Zelle.HasFormula Then Zelle.ClearContents
Next Zelle
'  ws.Rows(16).Range("E16").value = worksheets("hilfstabelle").
ws.Cells(letzteZeile + 1, 1).Select
ws.Protect password:="report", _
AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True,  _
AllowFormattingRows:=True
Application.EnableEvents = True
End Sub

Grüße,
Nati

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Fast off topic
22.12.2017 08:53:19
RPP63
Moin!
Erklärst Du uns, was diese Vorhaltung "leerer" Zeilen soll?
Nutze ein Listobject ("intelligente" Tabelle, Strg+t) und Formeln und Formate erweitern sich selbständig, völlig ohne VBA.
Gruß Ralf
AW: Fast off topic
22.12.2017 10:42:24
Nati
Hallo Ralf, hallo Franz,
danke euch.
Hintergrund ist: ja, ich möchte einfach nur die Tabelle erweitern (bei klick auf einen Button, das klappt auch wunderbar.) In der Change methode steht folgendes:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim res As Long
Dim rngz As Range
On Error GoTo Ende
Application.EnableEvents = False
For Each rngz In Application.Intersect(Columns("E"), Target).Cells
If rngz  0 Then
res = MsgBox("You are about to set the index at: " & rngz & " .Please note, that once the  _
index is set, it can only be changed by pressing the 'New Index'-Button on the top left of the spreadsheet. If you want to set the index at: " & rngz & " please press 'yes'", vbInformation + vbYesNo, "Setting index")
Select Case res
Case vbYes
Case vbNo
rngz.Clear
End Select
End If
Next rngz
Ende:
Application.EnableEvents = True
End Sub
bei Klick auf das andere Makro (siehe oben) wird Spalte 16 kopiert und unten 5ßx eingefügt (Inhalte werden anschließend gelöscht), aber sobald was in E(Zeile 16) drin steht, wird bei jedem einfügen (50x) diese Change methode ausgeführt, da diese immer ausgeführt wird, sobald was in Spalte E eingetragen wird , unabhängig von der Zeile.
Lösche ich in Spalte E die Inhalte (Franz Vorschlag, wird die Methode trz ausgeführt, weil zuerst der Inhalt eingefügt wird und DANACH gelöscht.) Inhalt in Spalte e Zeile 16 sollte demnach überhaupt nicht mit eingefügt werden beim kopieren...
Anzeige
AW: Fast off topic
22.12.2017 21:58:33
fcs
Hallo Nati,
ich blicke immer noch nicht genau durch was du da treibst.
Dein Makro deaktiviert zu Beginn die Ereignix-Makros. Somit dürfte das Change-Ereignismakro während der Ausführung des Makros nicht ausgelöst werden!
Da muss noch irgendetwas anderes dahinter stecken - z.B. eine Datengültigkeitsprüfung.
Du kannst auch nicht erwarten, dass jemand einen vielzeiligen Makro-Code im Detail analysiert ohne eine Datei mit Beispieldaten (inkl. Makros) verfügbar zu haben.
Gruß
Franz
AW: Change Methode "unterdrücken"
22.12.2017 08:58:50
fcs
Hallo Nati,
das Problem kann eigentlich nicht ein Change-Ereignismakro sein, denn diese deaktivierst du ja zu Beginn des Makros.
wenn in Spalte E die Inhalte nicht gelöscht werden sollen, dann musst du folgende Zeile anpassen:
        If Not Zelle.HasFormula Then Zelle.ClearContents

ändern in
        If Not Zelle.HasFormula And Zelle.Column  5 Then Zelle.ClearContents

Gruß
Franz
Anzeige
AW: Change Methode "unterdrücken"
22.12.2017 17:24:11
onur
Events kannst du kurzfristig mit
Application.EnableEvents = False

unterdrücken, musst nur später wieder auf =true stellen.
Aber wenn man vernünftig programmiert hat, braucht man das eigentlich nicht.

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige