Excel VBA:加速设置列宽和视图设置的宏

问题描述 投票:0回答:1

我和我的团队有一个 Excel 文件,其中使用 A 到 L 列。我们使用该文件发送不同的预算,因此该文件有多个版本。发生的情况是,人们开始调整列宽,然后打印区域不再适合。

我们希望始终确保标准化的布局版本。

我已经设置了一个 VBA,确保在打开文件时实现预选的列宽。如果有人更改宽度,当其他人再次打开文件时,宽度将自动调整。

我的代码工作正常,但是,一个问题是运行 2 分 30 秒需要很长时间。关于如何加快速度有什么建议吗?

Sub Workbook_Open()

'-----START TIMER-----
Dim StartTime As Double
Dim TimeTaken As String
Dim ws As Worksheet

StartTime = Timer

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.AskToUpdateLinks = True
    Application.DisplayAlerts = True
    Application.Calculation = xlAutomatic
    ThisWorkbook.Date1904 = False
    Application.StatusBar = False

On Error Resume Next

'For Each ws In ActiveWorkbook.Worksheets ' Start of the VBA loop
For Each ws In Worksheets ' Start of the VBA loop
    With ws
    ws.Activate 'this part ensures each seperate tab is activated and the below code is run through
    Columns("A").ColumnWidth = 0.94 'this line determines the column width
    Columns("B").ColumnWidth = 6.56 'this line determines the column width
    Columns("C").ColumnWidth = 13.56
    Columns("D").ColumnWidth = 13.56
    Columns("E").ColumnWidth = 13.56
    Columns("F").ColxumnWidth = 10.11
    Columns("G").ColumnWidth = 6.11
    Columns("H").ColumnWidth = 10.11
    Columns("I").ColumnWidth = 10.11
    Columns("J").ColumnWidth = 13.56
    Columns("K").ColumnWidth = 6.56
    Columns("L").ColumnWidth = 6.56
    Wsh.Range("A1").Select 'this part ensure each worksheet view start position is A1
    ActiveWindow.View = xlPageBreakPreview 'Set Activesheet to Page Break Preview Mode
    ActiveWindow.Zoom = 114 'this line sets the permanent zoom % for all tabs
    ActiveWindow.ScrollColumn = 1
    ActiveWindow.ScrollRow = 1
    End With

Next ws
Application.Goto ThisWorkbook.Sheets("resume").Range("A1"), True 'starting position upon opening the file
'Worksheets(1).Activate 'this line make sure view is at first tab

    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.AskToUpdateLinks = False
    Application.DisplayAlerts = False
    Application.Calculation = xlAutomatic
    ThisWorkbook.Date1904 = False
    ActiveWindow.View = xlNormalView

'------ END TIMER------
TimeTaken = Format((Timer - StartTime) / 86400, "hh:mm:ss")
MsgBox "Running time was " & TimeTaken & " (hours, minutes, seconds)"

End Sub
excel vba
1个回答
0
投票

将列声明为变量并反转后台任务。

当代码运行时,屏幕更新和所有这些东西都可能是假的,然后最后将它们改回真。仅此一点就会极大地加快速度。

© www.soinside.com 2019 - 2024. All rights reserved.