Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1160to1164
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

Brauch nochmal Hilfe: Worksheet_Change

Brauch nochmal Hilfe: Worksheet_Change
Holger
Hallo Leute,
mit eurer Hilfe habe ich in die Tabelleneigenschaften folgendes Makro eingebaut.
Es funktioniert einwandfrei, leider dauert es aber ewig wenn:
- man in mehreren Zellen gleichzeitig etwas einträgt
- und die Daten durch AutoFiler eingeschränkt sind.
Kann man das noch irgendwie verbessern?
Public Sub Worksheet_Change(ByVal Target As Range)
Dim RaBereich, RaBereich2 As Range, RaZelle, RaZelle2 As Range
Set RaBereich = Range("G7:R2000")
Set RaBereich = Intersect(RaBereich, Range(Target.Address))
Set RaBereich2 = Range("Q7:Q2000")
Set RaBereich2 = Intersect(RaBereich2, Range(Target.Address))
If Not RaBereich Is Nothing Then
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
For Each RaZelle In RaBereich
With RaZelle
If RaZelle.Value  "" Then
RaZelle.Offset(0, -2) = "OK"
RaZelle.Offset(0, -2).Font.Color = vbBlue
Else
RaZelle.Offset(0, -2) = ""
End If
End With
Next RaZelle
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End If
Set RaBereich = Nothing
If Not RaBereich2 Is Nothing Then
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
For Each RaZelle2 In RaBereich2
With RaZelle2
If UCase(RaZelle2.Value) = "X" Then
RaZelle2.Offset(0, -1) = "PARTLY"
RaZelle2.Offset(0, -1).Font.Color = vbRed
RaZelle2.Value = Now()
RaZelle2.NumberFormat = "DD.MM.YYYY"
RaZelle2.Copy
RaZelle2.PasteSpecial xlPasteValues
Application.CutCopyMode = False
End If
End With
Next RaZelle2
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End If
Set RaBereich2 = Nothing
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Noch eine Frage
09.06.2010 15:48:34
Holger
Wie kann ich die Definition des RaBereichs automatisch einschränken auf die aktuelle Auswahl?
Denn wenn durch AutoFilter eingeschränkt wird, müßte er ja wesentlich weniger überprüfen und wäre effizienter oder nicht?
zu 2.
09.06.2010 16:34:25
CitizenX
Hallo Holger,
es reicht wenn du die Schleife mit:
For Each RaZelle In Selection
beginnst....
Selection braucht in diesem Fall nicht deklariert zu werden.
Grüße
Steffen
Nachtrag zu 2.
09.06.2010 16:42:16
CitizenX
Ich nochmal ;-)
..hatte übersehen das der Code auf einem Worksheet_Change liegt.
das funzt nicht so wie gewollt mit Selection.
Besser ist du legst den Code mit Selection auf ein manuell ausführbares Ereignis (Button,Tastenkombination etc.)
Dann kannst du dein zu bearbeitenden Bereich auswählen und den Code dann rüberlaufen lassen..
Grüße
Steffen
Anzeige
AW: Nachtrag zu 2.
09.06.2010 19:57:13
Holger
Hallo,
Makro geht leider nicht, denn die Werte sollen ohne Makro sofort entsprechend eingetragen werden. Hat sonst keiner eine Idee?
Wäre schade, ist doch so ein tolles Makro eigentlich
AW: Brauch nochmal Hilfe: Worksheet_Change
10.06.2010 04:44:28
fcs
Hallo Holger,
warum verwendest du nicht bedingte Formatierungen, um die angezeigte Schriftfarbe bei bestimmten Zellinhalten ("OK" in Spalten G bis R," PARTLY" in Spalte P) zu ändern?
Die folgenden Zeilen sind überflüssig:
                        RaZelle2.Copy
RaZelle2.PasteSpecial xlPasteValues
Application.CutCopyMode = False
In die Zelle RaZelle2 wurde vorher mit
RaZelle2.Value = Now()
schon ein konstanter Wert geschrieben.
Wenn du die komplette Spalte Q mit Datum formatierst, dann kannst du die Formatierung der jeweils geänderten Zellen in der Prozedur auch weglassen.
Evtl. beschleunigt die Prüfung der Hidden-Eigenschaft der Zeilen die Ausführung, so dass nur in den sichtbaren Zeilen Wertänderungen und Formatierungen ausgeführt werden.
Gruß
Franz
Public Sub Worksheet_Change(ByVal Target As Range)
Dim RaBereich As Range, RaBereich2 As Range, RaZelle As Range, RaZelle2 As Range
Set RaBereich = Range("G7:R2000")
Set RaBereich = Intersect(RaBereich, Range(Target.Address))
Set RaBereich2 = Range("Q7:Q2000")
Set RaBereich2 = Intersect(RaBereich2, Range(Target.Address))
If Not RaBereich Is Nothing Then
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
For Each RaZelle In RaBereich
With RaZelle
If RaZelle.EntireRow.Hidden = False Then
If RaZelle.Value  "" Then
RaZelle.Offset(0, -2) = "OK"
RaZelle.Offset(0, -2).Font.Color = vbBlue
Else
RaZelle.Offset(0, -2) = ""
End If
End If
End With
Next RaZelle
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End If
Set RaBereich = Nothing
If Not RaBereich2 Is Nothing Then
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
For Each RaZelle2 In RaBereich2
With RaZelle2
If RaZelle2.EntireRow.Hidden = False Then
If UCase(RaZelle2.Value) = "X" Then
RaZelle2.Offset(0, -1) = "PARTLY"
RaZelle2.Offset(0, -1).Font.Color = vbRed
RaZelle2.Value = Now()
RaZelle2.NumberFormat = "DD.MM.YYYY"
End If
End If
End With
Next RaZelle2
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End If
Set RaBereich2 = Nothing
End Sub

Anzeige
HIER DIE LÖSUNG!!!
10.06.2010 10:44:14
Holger
Hi,
durch eure Postings habe ich alles nochmal durchgesehen und das Ereignis, welches
eine RA.Zelle "" macht, ist ein Makro, welches ein Datum einfügt.
Zur Erklärung: Der User wählt eine oder mehrere Zellen aus, drückt auf ein Ribbon, dann wird
in diesen Zellen das Datum eingefügt und in anderen Zellen erscheint automatisch ein ok.
Sehr praktisch wie ich finde.
Jedenfalls dieses Makro war langsam und nicht das in den Tabelleneigenschaften.
Ich habe dort diese Attribute gesetzt und nun geht es ruck/zuck
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige