我已经尝试了大量的解决方案,现在浏览网页数小时。也许你们中的一个可以提供帮助。
我有一个宏,用于选择名称中包含特定字符串的所有工作表,然后打印它们。如果工作表太多,它会冻结,并且您无法将宏分解为调试,而Ctrl + Alt + Del是唯一的出路。它每次都在不同的位置冻结......
我的原始代码:
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim x As Integer
For x = 1 To Worksheets.count
If VBA.InStr(Worksheets(x).Name, "Lateral Assessment") > 0 Then
With Worksheets(x).PageSetup
.Orientation = xlPortrait
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
Worksheets(x).PrintOut
End If
Next x
Application.ScreenUpdating = True
Application.EnableEvents = True
我已尝试过其他论坛帖子,以下内容:
我还在某一点上添加了一个进度条,我在很多较大的进程中使用了进度条,你可以看到它在冻结不一致的纸张数之前进行计数。另外,请注意即使我从VBA代码窗口一次运行一次迭代也会出现问题,因此,它似乎与处理时间无关(尽管人们无法确定)。
我目前的代码:
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim x As Long, iTotal As Long, sSheets() As String
iTotal = -1
For x = 1 To Worksheets.count
If VBA.InStr(Worksheets(x).Name, "Lateral Assessment") > 0 Then
With Worksheets(x).PageSetup
.Orientation = xlPortrait
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
iTotal = iTotal + 1
ReDim Preserve sSheets(iTotal)
sSheets(iTotal) = Worksheets(x).Name
End If
Next x
If iTotal <> -1 Then
Sheets(sSheets).PrintOut Copies:=1, Collate:=True
End If
Application.ScreenUpdating = True
Application.EnableEvents = True
知道为什么会这样,以及我没有尝试过的可能的解决方案吗?
答案 0 :(得分:1)
确保已启用ScreenUpdating。 VBA代码是: Application.ScreenUpdating = True
如果它挂起,这是有效的。调整打印预览窗口的大小(抓住角落或边缘,然后再缩小,然后重新调整大小)。这似乎导致Excel进入ScreenUpdating并让你控制回来。以防万一,因此您始终可以访问窗口的边缘来执行此操作,您可以在printpreview之前自动调整Excel的大小:
Sub WindowState_850x1400()
With Application
.WindowState = xlNormal
.Top = 1
.Left = 1
.Height = 850
.Width = 1400
End With
End Sub