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

App.ScreenUpdating = False funktioniert nicht

App.ScreenUpdating = False funktioniert nicht
13.04.2013 13:20:08
Albert
Liebe VBA Experten,
ich habe für folgende Probleme keine Lösung gefunden:
1) Application.ScreenUpdating = False funktioniert zwar bei einzelnen Makros nicht jedoch bei "Worksheet_selectionChange(ByVal Target As Range)". Mit jedem Zellwechsel ist ein deutliches Blinken bemerkbar. Im Hintergrund läuft auch ein sehr umfangreiches
"Worksheet_Change" Makro.
Ausschnitte aus diesen beiden Makros:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A, B, C, D, E, F, G, h, i, J, K, l, m, N, o, P, Q, R, S, T As Long
On Error GoTo C:
Application.ScreenUpdating = False
Select Case Target.Column
Case 2: Target.Offset(0, 1).Select
Case 3: Target.Offset(0, 1).Select
Case 4:
If Range("o3") = 2 Then
i = 0
J = 3
Else
i = 0
J = 2
End If
Target.Offset(i, J).Select
Case 5: Target.Offset(0, 1).Select
Case 6:
End Sub

Private Sub Worksheet_selectionChange(ByVal Target As Range)
Application.EnableEvents = True
Application.ScreenUpdating = False
End Sub
2) Je nach Dateizustand (unter bestimmten Voraussetzungen werden beim Schließen einzelne Tabellen ausgeblendet) sollen Teilbereiche in der
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub

übersprungen werden. ZB die Anweisung "Tabelle1.Visible = xlSheetVeryHidden" soll nicht ausgeführt werden, da die Tabelle in der vorher laufenden Anwendung bereits gelöscht wurde. Der Versuch mit einer If-Abfrage die Anweisung abzufangen funktioniert hier nicht.
Hat jemand von Euch eine Idee, wie ich diese Probleme lösen könnte? Für Rückmeldungen bedanke ich mich im Vorhinein
Albert

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

Betreff
Datum
Anwender
Anzeige
AW: App.ScreenUpdating = False funktioniert nicht
13.04.2013 13:27:27
Tino
Hallo,
verzichte auf die Select Anweisungen, man kommt fast immer ohne aus.
Leiter kenne ich Dein Projekt nicht um da besser helfen zu können!
Zur Info
In Deiner Deklarierung ist nur die Variable T als Long deklariert der Rest ist Variant.
Gruß Tino

AW: App.ScreenUpdating = False funktioniert nicht
13.04.2013 13:49:27
Albert
Hallo Tino,
danke für die rasche Antwort. Um die Benutzerfreundlichkeit zu erhöhen, soll der Cursor nach Eingabe in eine bestimmte Zelle springen. Es sind jedoch mehr als 10 Zellen als neue Adresse möglich und die Anzahl der Bedingungen für die neue Zelladresse liegt bei weitem über 20, ich weiß keine andere Möglichkeit wie ich die Zellansteuerung bewerkstelligen soll.
Danke auch für Deklarationstip
LG Albert

Anzeige
AW: App.ScreenUpdating = False funktioniert nicht
13.04.2013 15:32:56
fcs
Hallo Albert,
Problem 1 - Scrennupdating
Es gibt ein paar Anweisungen in Excel, deren Bildschirmaktualisierung/Flackern per Screenupdating=False nicht vollständig unterdrückt werden kann.
Außerdem muss du natürlich im Programmcode darauf achten, dass nach dem Deaktivieren der Bildschirmaktualiserung diese nicht unerwünschter Weise wieder aktiviert wird, wenn das Makro in ein anderes Makro verzweigt. Das kann zum Beispiel bei dir der Fall sein, wenn das Makro "Worksheet_Change" eine Zelle selektiert. Dann wird "Worksheet_SelectionChange", ggf. mit Bildschirmaktualisierung Aus und Ein ausgeführt, bevor "Worksheet_Change" beendet wird.
Das kann man ggf. unterdrücken, indem "Application.EnableEvents" zu beginn der "WorkSheet_Change" -Prozdur auf False und am Ende auf True gesetzt wird, oder indem man die Bildschirmaktualisierung in der "Worksheet_SelectionChange"-Prozedur mit einer Variablen steuert, die in der "WorkSheet_Change" gesetzt wird. Welche Variante du benötigst hängt davon ab, ob die ""WorkSheet_SelectionChange" ausgeführt werden soll, wenn das Makro "WorkSheet_Change" eine der Zielzellen selektiert.
Hier Beispielhaft die Steuerung Via Variable.
Private bolNoScreenUp As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A, B, C, D, E, F, G, h, i, J, K, l, m, N, o, P, Q, R, S, T As Long
On Error GoTo C:
Application.ScreenUpdating = False
bolNoScreenUp = True
Select Case Target.Column
Case 2: Target.Offset(0, 1).Select
Case 3: Target.Offset(0, 1).Select
Case 4:
If Range("o3") = 2 Then
i = 0
J = 3
Else
i = 0
J = 2
End If
Target.Offset(i, J).Select
Case 5: Target.Offset(0, 1).Select
Case 6:
End Select
C:
Application.ScreenUpdating = False
bolNoScreenUp = False
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'    Exit Sub
Application.EnableEvents = False  '? True setzen nicht unbedingt sinnvoll am Beginn eines  _
Ereignismakros
If bolNoScreenUp = False Then Application.ScreenUpdating = False
'Test
For i = 1 To 100
ActiveCell.Offset(1, 0).Select
Next
ActiveCell.Offset(-100, 0).Select
If bolNoScreenUp = False Then Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Problem 2 - gelöschte Objekte überspringen
Das kann man nur über angepasste Fehlerbehandlung lösen. Da du hier direkt mit den Objektnamen arbeitest darfst du
Die Anweisung "Option Explicit" am Beginn des Moduls "DieseArbeitsmappe" nicht verwenden, da sonst direkt ein Variablenfehler angezeigt wird.
Nachfolgend ein Beispiel für die Fehlerbehandlung. Den Wert von Fehler muss du dann ggf. entsprechend setzen und in den Case-Anweisungen ergänzen, um den Ablauf im Makro zu steuern.
'Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Fehler As Integer, bolSaved As Boolean
On Error GoTo Fehler
bolSaved = Me.Saved
Fehler = 1
Tabelle1.Visible = xlSheetVeryHidden
Fehler = 2
If bolSaved = True Then Me.Save
Fehler:
With Err
Select Case .Number
Case 0 'alles ist ok
Case 424 'Objekt fehlt
Select Case Fehler
Case 1
Resume Next
Case 2
End Select
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
End Sub

Gruß
Franz

Anzeige
Vielen Dank Franz!!!
13.04.2013 20:04:47
Albert
Hallo Franz,
vielen herzlichen Dank für die ausführliche Antwort. Ich werde heute wahrscheinlich nicht mehr die Zeit finden, Deine Anweisungen umzusetzen. Wahrscheinlich erst nächste Woche, ich werde jedenfalls über das Ergebnis berichten.
Nochmals vielen Dank und schönen Abend
Albert

AW: Es funktioniert, vielen, vielen Dank Franz!!!
13.04.2013 20:20:52
Albert
Hallo Franz,
das mit der Bildschirmaktualisierung konnte ich noch umsetzen, es funktioniert. "Wunderbar!!!"
Vielen herzlichen Dank, ich hatte bereits viele Stunden in die Fehlersuche investiert.
Ich werde selbstverständlich auch über das Ergebnis meines zweiten Problems berichten.
Schönen Abend
Albert
Anzeige

66 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige