Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
392to396
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
392to396
392to396
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Eingabeschutz über Makro - Codeoptimierung möglich

Eingabeschutz über Makro - Codeoptimierung möglich
04.03.2004 16:28:38
Andreas Emmert
Hallo Forum,
ich habe ein kleines Makro entwickelt, dass einen Eingabeschutz darstellt (s.u.). Dabei sollen nur Zellen mit einem festgelegten Format (hier: keine Hintergrundfarbe + Umrandung) freigegeben sein. Funktioniert auch alles wunderbar. Unschön dabei ist nur, dass sich durch das Application.Undo eine Schleife aufbaut, d.h. bei der Rückgängigmachung der Aktion/Eingabe flackert die Zelle etwa eine Sekunde. Lässt sich die Schleife irgendwie sauber unterbrechen, nachdem ich die Aktion rückgängig gemacht habe?
Danke und Grüße
Andreas
================================

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:IV65536")) Is Nothing Then
With ActiveSheet.Cells(Target.Row, Target.Column)
If Not .Borders(xlEdgeLeft).ColorIndex = -4142 And _
Not .Borders(xlEdgeRight).ColorIndex = -4142 And _
Not .Borders(xlEdgeTop).ColorIndex = -4142 And _
Not .Borders(xlEdgeBottom).ColorIndex = -4142 And _
.Interior.ColorIndex = -4142 Then
' Keine Aktion, wenn in einer freigegebenen Zelle erfasst wird
Else
' Aktion, wenn in einer geschützten Zelle erfasst wird
Application.Undo
End If
End With
End If
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Eingabeschutz über Makro - Codeoptimierung möglich
04.03.2004 16:53:43
xXx
Hallo,
was soll denn das?
If Not Intersect(Target, Range("A1:IV65536")) Is Nothing Then
das ist immer der Fall, da Target immer auf dem Blatt ist.
With ActiveSheet.Cells(Target.Row, Target.Column)-->With Target
und warum gibst du nicht einfach die Zellen frei und setzt einen Blattschutz? Dann kann man in geschützte Zellen nichts eingeben.
Gruß aus'm Pott
Udo
AW: Eingabeschutz über Makro - Codeoptimierung möglich
04.03.2004 17:08:12
Andreas
Hallo Udo,
die Zellen kann ich nicht einfach über Blattschutz sperren, da ich eine Reihe von Gruppierungen habe, die dann auch gesperrt sind. Excel meint nämlich, dass wenn man das Arbeitsblatt schützt, auch automatisch alle Strukturen/Gruppierungen geschützt sind und damit unbrauchbar werden. Deshalb also der etwas umständliche Weg über ein Makro.
Dass man With ActiveSheet.Cells(Target.Row, Target.Column) in With Target wandeln kann, stimmt, da gebe ich dir vollkommen recht.
If Not Intersect(Target, Range("A1:IV65536")) Is Nothing brauche ich natürlich um abzuprüfen, ob irgendwo auf dem Blatt etwas geändert wird. Ich weiß ja nicht, an welcher Stelle die Eingabezelle steht, da der Benutzer selbst Eingabezellen definieren kann. Oder hast du eine bessere Lösung?`
Offen ist ja auch noch meine eigentliche Frage, wie man die Schleife unterbrechen kann nach dem ersten Application.Undo .....
cheerio
Andreas
Anzeige
AW: Eingabeschutz über Makro - Codeoptimierung möglich
04.03.2004 20:44:56
xXx
Hallo Andreas,
wenn auf dem Blatt nichts geändert wird, wird auch das Ereignis Change nicht ausgelöst, du brauchst also nicht abzufragen, ob auf dem Blatt etwas geändert wurde.
Zu deinem eigentlichen Prob: ein Application.EnableEvents= False am Anfang sollte helfen. =True am Ende nicht vergessen.
Gruß aus'm Pott
Udo
AW: Eingabeschutz über Makro - Codeoptimierung möglich
05.03.2004 06:59:08
Andreas
Hallo Udo,
ich werde es heute mal versuchen und sehen ob's klappt, danke erst mal für die Hilfe!
Gruß aus der Nürnberger Ecke
Andreas

286 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige