2009-09-08 83 views
2

我想將模板工作表複製到其自身的左側以由報告生成器填充。這一切工作正常。沒有閃爍的複製工作表

但是,當涉及到表格複製行(如下所示)時,它們是一個閃光燈,因爲excel出現然後消失 - 儘管偶爾我會留下一個藍色的,部分填充的excel窗口。

我已將Application.ScreenUpdating設置爲false,並且.Visible也設置爲false,並且我每次都重置它們以儘量減少中斷。這閃光燈真的很煩人。無論如何阻止它?

 ' 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 

更新:如果我使用Set shtVariance = Sheets.Add我不明白的閃光燈,但我失去了所有漂亮的格式。

回答

1

也許我誤解了,但不應該在複製之前將application.screenupdating設置爲false?

更新 還沒什麼原因造成的問題,但屏幕閃爍可能是因爲現代複製工作表完全清楚被激活。我確實使用包含大圖像的工作表使用類似於您的代碼來屏幕閃爍。 您可以嘗試通過設置Application.EnableEvents禁用激活=假 也許是這樣的:

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 
+0

我說:我已經設置ScreenUpdating爲false。我再次設置它以去除剩下的醜陋藍色窗口,但我仍然有那樣的閃爍。 – 2009-09-08 15:45:50

+0

好吧我誤解了:) 對不起,使用上面的代碼時無法重現行爲(無屏幕閃爍)。據推測該模板非常重要,複製操作需要很長時間? 我通常不會打擾application.visible或application.interactive,application.screenupdating通常就足夠了。您是否因特定原因使用這些設備? 如果您爲這個問題提供更多的上下文和代碼,可能會有所幫助。 – andyb 2009-09-08 17:36:17

+0

以下是一些背景:我們爲公司內部和外部的各種團體創建報告。這些報告是Excel的xlt文件,它們有vb代碼模塊。這些報告在某些情況下超過了65K行的限制,因爲excel <= 2K3,所以我們現在正在拆分表單來補償。 '模板頁面'只是一張表格,其中包含美化(徽標,文本位,全部位於前7行)。圍繞該部分的代碼在跑到數據庫之前填充一些文本,以開始吸取數據以填充報告。 – 2009-09-09 08:05:29

1

運行你的代碼時,我只能得到一個「閃光」。

時,該行的代碼運行

Application.Visible = False 

這是因爲Excel是隱藏的,瞬間顯示在桌面,然後Excel將再次顯示這是。我會刪除該行代碼。

我還會檢查以確定在重新啓動屏幕更新之前再次選擇在調用代碼時處於活動狀態的工作表。

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