2 Stimmen

Blatt ohne Flimmern kopieren

Ich möchte ein Vorlagenblatt links von sich selbst kopieren, damit es von einem Berichtsgenerator ausgefüllt werden kann. Das funktioniert alles gut.

Bei der Zeile zum Kopieren von Blättern (siehe unten) blitzt es jedoch auf, wenn Excel erscheint und dann wieder verschwindet - gelegentlich bleibt jedoch ein blaues, teilweise ausgefülltes Excel-Fenster zurück.

Ich habe bereits Application.ScreenUpdating auf false gesetzt und .Visible ist ebenfalls auf false gesetzt, und ich setze sie jedes Mal zurück, um die Störung zu minimieren. Dieses Blinken ist wirklich lästig. Gibt es eine Möglichkeit, dies zu verhindern?

        ' create new sheet from template sheet
        shtDeliveryVariance.Copy Before:=shtDeliveryVariance
        Set shtVariance = Sheets(shtDeliveryVariance.Index - 1)
        shtVariance.Name = "Delivery Variance " & Format(nSheetNumber, "000")

        ' minimise the flashes
        Application.Interactive = False
        Application.ScreenUpdating = False
        Application.Visible = False

Update : Wenn ich die Set shtVariance = Sheets.Add Ich bekomme zwar kein Blitzlicht, aber ich verliere die ganze schöne Formatierung.

2voto

Robert Mearns Punkte 11048

Bei der Ausführung Ihres Codes konnte ich nur ein einziges "Aufblitzen" feststellen.

Dies ist der Fall, wenn der Code in dieser Zeile ausgeführt wird

Application.Visible = False

Dies geschieht, weil Excel ausgeblendet wird, der Desktop kurzzeitig angezeigt wird und dann Excel wieder angezeigt wird. Ich würde diese Codezeile entfernen.

Ich würde auch prüfen, ob das Blatt, das beim Aufruf des Codes aktiv war, wieder ausgewählt ist, bevor ich die Bildschirmaktualisierung wieder einschalte.

Sub Test_Flash()

Dim shtDeliveryVariance As Worksheet
Dim i As Integer

Application.Interactive = False
Application.ScreenUpdating = False

Set shtDeliveryVariance = ActiveWorkbook.Worksheets("Sheet1")
nSheetNumber = 1

For i = 1 To 100
 shtDeliveryVariance.Copy Before:=shtDeliveryVariance
 Set shtVariance = Sheets(shtDeliveryVariance.Index - 1)
 shtVariance.Name = "Delivery Variance " & Format(nSheetNumber, "000")
 nSheetNumber = nSheetNumber + i
Next i

ActiveWorkbook.Worksheets("Sheet1").Select

Application.Interactive = True
Application.ScreenUpdating = True

End Sub

1voto

andyb Punkte 770

Vielleicht habe ich es falsch verstanden, aber sollte nicht application.screenupdating vor dem Kopieren auf false gesetzt werden?

Update Ich bin mir noch nicht ganz im Klaren darüber, was das Problem verursacht, aber das Bildschirmflackern könnte darauf zurückzuführen sein, dass das kopierte Arbeitsblatt aktiviert ist. Ich habe mit einem Arbeitsblatt, das ein großes Bild enthält und Code wie den Ihren verwendet, etwas Bildschirmflackern bekommen. Sie könnten versuchen, die Aktivierung zu deaktivieren, indem Sie Application.EnableEvents = False setzen. Vielleicht so etwas wie dies:

Application.ScreenUpdating = False
Application.EnableEvents = False
Dim active As Worksheet
Set active = ThisWorkbook.ActiveSheet 'or somesuch

'your code here

active.Activate
Application.EnableEvents = True
Application.ScreenUpdating = true

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X