Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
164to168
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
164to168
164to168
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Alternative zu Worksheet_Change?

Alternative zu Worksheet_Change?
08.10.2002 16:07:02
edi
Gibt es eine Alternative zu Worksheets_Change?

Beim ändern des inhaltes der Zelle "L2" sollen die Spalten K und L addiert werden. Da nach jeder Addierten Zahl eine Änderung im Arbeitsblatt erfolgt wird bei jeder Addition die Worksheet_Change Funktion nochmal gestartet (Dadurch kommt es zum rekursiven Aufruf). Zum Addieren von 3 Zeilen braucht meine Funktion ca 4Sekunden !!! Beim Debuggen wird auch klar warum. Eben wegen dem mehrmaligen aufruf.

Welche Alternativen gibt es oder wie kann ich die Rekursion umgehen?
(Worksheet_SelectionChange führt zum gleichen Ergebnis).

Anbei folgt ein Auszug aus meinem bisherigen Programm .

'-------------------------
Private Sub Worksheet_Change(ByVal Target As Excel.Range)

If Not Intersect(Target, Range("L2")) Is Nothing Then
'Schutz von Spalte K aufheben, Spalte K+L addieren _
'und wieder schützen
Call aendern
End If

End Sub
'-----------------------------------
Sub aendern()

Dim Merker As Double
Dim i As Integer
Dim intZeilenzahl As Integer

ActiveSheet.Unprotect

intZeilenzahl = ActiveSheet.UsedRange.Rows.Count
For i = 4 To intZeilenzahl - 1

If Worksheets("Aktivitäten").Cells(i, 11).HasFormula _
Or IsEmpty(Worksheets("Aktivitäten").Cells(i, 11)) Then

'MsgBox "nix tun" 'nix tun
Else

MsgBox "Addieren"
'Cells(Zeile, Spalte)
Merker = Worksheets("Aktivitäten").Cells(i, 11).Value
'Alten Wert aus Spalte K merken
Merker = Merker + Worksheets("Aktivitäten").Cells(i, 12).Value
'Addiere Spalte K und L
Worksheets("Aktivitäten").Cells(i, 11).Value = Merker
'Neuen Wert in Spalte K schreiben
Worksheets("Aktivitäten").Cells(i, 12).Value = 0
'Löschen der alten Werte in Spalte L
End If
Next

Worksheets("Aktivitäten").Activate
Worksheets("Aktivitäten").Select
Worksheets("Aktivitäten").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

End Sub



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

Betreff
Datum
Anwender
Anzeige
Re: Alternative zu Worksheet_Change?
08.10.2002 16:18:08
th.heinrich
hallo Edi,

clicke im VBA editor doppelt auf das sheet, im rechten fenster

dann in der linken listbox worksheet auswaehlen, in der rechten

listbox kannst Du nun waehlen was am besten passt.

gruss thomas

Re: Alternative zu Worksheet_Change?
08.10.2002 16:39:26
edi
Hallo Thomas,

danke für den Tip, ich hab schon fast alle Prozeduren zum Objekt Worksheet ausprobiert und bin immer wieder über die Rekursion gestolpert. Und genau das will ich ja vermeiden?

Bin für jeden kleinen Tip dankbar. Hab auch schon anderes Probiert z.B. über Auswahlliste (geht aber nicht wegen Fixierungen im Formular); Combobox (klappt zwar bedingt; Combobox bleibt aber bei der Gruppierung von Spalten stehen; ist also auch keine wirklich brauchbare Lösung). Mir fällt im Moment wirklich nichts mehr ein, was noch klappen könnte.

Gruß Edi

Anzeige
Re: Alternative zu Worksheet_Change?
08.10.2002 17:07:32
Martin Beck
Hallo Edi,

schau Dir mal die EnableEvents-Eigenschaft an.

Gruß
Martin Beck

Enable Events?
08.10.2002 17:29:22
edi
Hallo Martin,

kannst du da etwas konkreter werden oder mir ein Beispiel geben. Ich hab mit den enableEvents-Eigenschaften bisher noch nichts zu tun gehabt.

Danke Edi

Re: Enable Events?
09.10.2002 12:33:46
Martin Beck
Hallo Edi,

vor die Zeile, die das Change-Ereignis erneut auslösen würde, schreibst Du

Application.EnableEvents = False

und an das Ende des Codes

Application.EnableEvents = True

Gruß
Martin Beck

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige