Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Application.Screenupdate
#1
Hi,

wie verhält sich denn Application.Screenupdate genau. Setzt das das Screenupdate in der ganzen Arbeitsmappe aus oder nur beim angesprochene Tabellenblatt?
Also wenn ich ein Macro hab, was mehrere Tabellenblätter anspricht, reicht es dann wenn ich Application.Screenupdate nur zu Beginn setze?

LG Tina
Antworten Top
#2
Moin Tina!
Application betrifft zwar die Anwendung Excel, Screenupdating (SU) aber nur den sichtbaren Bereich der Tabelle auf dem Bildschirm.
Meine steile These hat mich zu folgender Bastelei veranlasst:
Schreiben von 100.000 Werten in
a) sichtbare Zelle A1 SU false
b) sichtbare Zelle B1 SU true
c) nicht sichtbare Zelle RPP63 SU false
d) nicht sichtbare Zelle RPQ63 SU true

Das Ergebnis beweist obige These.
Andererseits zeigt es aber auch, dass die eigentliche Bremse das Schreiben in einzelne Zellen ist.
(und wirkliche Beschleunigung woanders gesucht werden sollt, Stichwort getmorespeed)
Code:
sichtbar: Dauer ScreenUpdating = Falsch 2,712890625
sichtbar: Dauer ScreenUpdating = Wahr 4,4765625
nicht sichtbar: Dauer ScreenUpdating = Falsch 2,638671875
nicht sichtbar: Dauer ScreenUpdating = Wahr 3,0703125

Wer meinen Versuch nachstellen möchte:
Modul Modul1
Option Explicit 
 
Sub sichtbar() 
Dim Start#, i&, a& 
With Tabelle1 
  .Cells.Clear 
  For a = 0 To 1 
    Application.ScreenUpdating = CBool(a) ' 0 = false, 1 = true 
    With .Range("A1").Offset(, a) 
      Start = Timer 
      For i = 1 To 100000 
        .Value = i 
      Next 
      Debug.Print "sichtbar: Dauer ScreenUpdating = " & CBool(a) & " " & Timer - Start 
    End With 
  Next 
  For a = 0 To 1 
    Application.ScreenUpdating = CBool(a) ' 0 = false, 1 = true 
    With .Range("RPP63").Offset(, a) 
      Start = Timer 
      For i = 1 To 100000 
        .Value = i 
      Next 
      Debug.Print "nicht sichtbar: Dauer ScreenUpdating = " & CBool(a) & " " & Timer - Start 
    End With 
  Next 
End With 
End Sub 

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • maninweb
Antworten Top
#3
Hallo Tina,

(12.03.2022, 05:50)so.egal schrieb: Also wenn ich ein Macro hab, was mehrere Tabellenblätter anspricht, reicht es dann wenn ich Application.Screenupdate nur zu Beginn setze?

zu welchem Ergebnis bist Du denn bei Deinen eigenen Tests gekommen? Wink

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • so.egal
Antworten Top
#4
Also bei den Sachen dich ich gemacht hab, hat es von der Zeit her keinen Unterschied gemacht. 
Und wenn ich mir das durchdenke, würde es auch wenig Sinn machen, wenn Blätter miteinander verknüpft sind, wenn man am Anfang das Screenupdate unterdrückt. 
Muss man es dann an entsprechender Stelle mit Worksheets("Tabelle").Application.Screenupdate=false unterdrücken?
Antworten Top
#5
Hallöchen,

Zitat:Und wenn ich mir das durchdenke, würde es auch wenig Sinn machen, wenn Blätter miteinander verknüpft sind, wenn man am Anfang das Screenupdate unterdrückt.

Mit Verknüpfungen hat das reichlich wenig zu tun, um nicht zu sagen gar nichts. Meine Programmierung mit mehr oder weniger "lustigem Hinweis" für Einsteiger sieht so aus:

'Bildschirmflackern aus
Application.Screenupdating = False
...
...
'Bildschirmflackern ein
Application.Screenupdating = True
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • so.egal
Antworten Top
#6
Noch ein Hinweis, welcher in meinem obigen Beitrag #2 nur indirekt erwähnt wurde:
Wer ScreenUpdating ausschalten muss, programmiert "ungünstig"!
Für Einsteiger in VBA sollte dieser Artikel zur Bettlektüre gehören, weil man nahezu niemals ein Objekt per Code auswählen muss:
https://www.online-excel.de/excel/singsel_vba.php?f=61
Aus diesem Artikel folgender denkwürdiger Satz:
Zitat:(Man könnte mit dem Ausschalten der Bildschirmaktualisierung noch etwas schneller werden, aber ...)


Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • so.egal
Antworten Top
#7
Ja, ich habe mich falsch ausgedrückt. Es geht mehr um Kopiervorgänge als um Verknüpfungen. Also wenn ich z.B. aus Tab x etwas in Tab y kopiere, dann muss der Screen von Tab x ja vorher upgedatet sein.
Antworten Top
#8
Hallöchen,

Zitat:Also wenn ich z.B. aus Tab x etwas in Tab y kopiere, dann muss der Screen von Tab x ja vorher upgedatet sein.

aber nur, wenn Du einen Screenshot kopierst ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste