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

Fehler im Worksheet_Change - Ablauf

Fehler im Worksheet_Change - Ablauf
And
Hallo,
ich habe im Tabellenblatt1 folgenden Code der mir die Zeilenhöhe
immer wieder optimal anpasst.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Rows("5:2000").EntireRow.AutoFit
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFiltering:=True
Application.ScreenUpdating = True
End Sub
fuktioniert soweit gut.
Wenn aber in der Tabelle eine Zelle noch im Bearbeitungsmodus ist,
und jetzt über die Tabellenreiter eine andere Tabelle ausgewählt wird
Kommt folgende Fehlermeldung:
Laufzeitfehler 1004 -
Die Autofit-Methode des RangeObjekts konnte nicht ausgeführt werden
Wie kann ich das "abfangen"
Gruß Andreas

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

Betreff
Benutzer
Anzeige
Tabelle bereits geschützt?
15.04.2010 17:48:01
Tino
Hallo,
bei mir kommt der Fehler wenn die Tabelle bereits geschützt ist.
Versuche es mal so.
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    ActiveSheet.Protect UserInterfaceOnly:=True, DrawingObjects:=True, _
                        Contents:=True, Scenarios:=True, AllowFiltering:=True
    Rows("5:2000").EntireRow.AutoFit
    Application.ScreenUpdating = True
End Sub
Gruß Tino
Anzeige
Richtige Prozedur?
15.04.2010 18:37:02
Erich
Hi Andreas,
ist sicher, dass der Fehler aus dieser Prozedur kommt?
Während eine Zelle in Bearbeitung ist, sollte sie eigentlich noch nicht laufen.
Gibt es noch andere Ereignisprozeduren?
Kannst du die Prozedur mal so ausprobieren?

Private Sub Worksheet_Change(ByVal Target As Range)
'     Application.ScreenUpdating = False
MsgBox "Worksheet_Change von " & Me.Name
Me.Rows("5:2000").EntireRow.AutoFit
Me.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _
AllowFiltering:=True
'     Application.ScreenUpdating = True
End Sub
ActiveSheet habe mal ich durch Me ersetzt - das ist vielleicht nicht unbedingt nötig, aber doch viel klarer.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
an Tino und Erich
15.04.2010 18:56:41
And
Hallo,
@Tino
man man man, bin i .....?
ja es lag am Blattschutz, habe mehrere Prozeduren laufen
über change, activate, deactivate usw. und hatte da übersehen,
das immer der Schutz wieder gesetzt wurde.
@Erich
"Während eine Zelle in Bearbeitung ist, sollte sie eigentlich noch nicht laufen."
wenn ich eine andere Tabelle über die Blattregisterkarten wähle, geht diese eben raus
und das Change-Ereignis wird gestartet.
Die anderen Prozeduren haben damit (außer beim Schutz setzen) nichts zu tun
P.S: Me. werde ich einsetzen
Danke euch beiden
kapiert - und nochmal: Me und ActiveSheet
15.04.2010 20:33:47
Erich
Hi Andreas,
jetzt hab ich das kapiert mit dem Change-Ereignis beim Blattwechsel.
Ich war (fälschlich) davon ausgegangen, dass im Bearbeitungsmodus ein Formel bearbeitet wird.
Dann wird die Zelle nicht verlassen, sondern der Name der neu gewählten Tab. in die Formel geschrieben.
In dem Fall läuft Change natürlich noch nicht.
So ganz unwichtig ist nicht, ob man in der Change-Prozedur "Me." (oder gar nichts) oder "ActiveSheet." schreibt.
Im von dir gemeinten Fall ist Me das Blatt, zu dem die Prozedur gehört,
ActiveSheet ist aber schon das neue ausgewählte Blatt.
Das kann herrliche Effekte geben...
Probier mal

Private Sub Worksheet_Change(ByVal Target As Range)
'   MsgBox Me.Name & " / " & ActiveSheet.Name
Application.EnableEvents = False
Me.Cells(1, 1) = Time
ActiveSheet.Cells(1, 2) = Now
Application.EnableEvents = True
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
nochmal: Me und ActiveSheet
15.04.2010 20:37:35
Erich
Hi,
oder so:

Private Sub Worksheet_Change(ByVal Target As Range)
'   MsgBox Me.Name & " / " & ActiveSheet.Name
Application.EnableEvents = False
With Me
.Cells(.Rows.Count, 1).End(xlUp).Offset(1) = Time
End With
With ActiveSheet
.Cells(.Rows.Count, 2).End(xlUp).Offset(1) = Now
End With
Application.EnableEvents = True
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige