2009-09-08 84 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