在没有Excel VBA中select的情况下设置缩放
是否有可能根据屏幕分辨率设置缩放级别没有Select
?
我已经按照代码:
Sheets(1).Range("A1:AC1").Select ActiveWindow.Zoom = True
取自https://stackoverflow.com/a/19439177/1903793
所需的代码将如下所示:
Range("A1:AC1").Width.Zoom=True
更新。 为什么我要避免select?
- 我的表具有基于用户设置的隐藏列。 因此,范围A1:AC1中的某些列是隐藏的。 我不能select单个列,因为这个特定的列可能被隐藏。
- select触发事件。 当然,我可以禁用事件,但禁用事件有一些我想避免的副作用。
这工作,但不会让你开心。
由于我们希望列AC (列29)是可见的,所以我们从Zoom
= 100开始,一次减less一步,直到VisibleRange
有29 + 1列:
Sub ShrinkWindow() Dim i As Long, r As Range For i = 100 To 1 Step -1 ActiveWindow.Zoom = i Set r = ActiveWindow.VisibleRange If r.Columns.Count = 29 + 1 Then Exit Sub Next i End Sub
只要测量当前的窗口宽度和范围的宽度。 然后你可以使用这些值来设置缩放比例。 注意 – 这需要一些额外的validation和error handling,但它应该给出基本的想法。
Private Sub ZoomToRange(target As Range) 'Get the window from the target range. Dim wnd As Window Set wnd = ActiveWindow 'Find out what you need to scale to. Dim scaling As Long scaling = 100 * wnd.Width / target.Width 'Limit to max and min zoom level. If scaling > 400 Then wnd.Zoom = 400 ElseIf scaling < 10 Then wnd.Zoom = 10 Else wnd.Zoom = scaling End If 'Scroll to the upper left cell target.Cells(1, 1).Activate End Sub
那就是我所结束的。 解决scheme抵抗隐藏的列。 我不select列,但形状。 添加一个矩形,将其命名为“BoxForZoom”。 它应该只是足够的你的缩放。 然后应用下面的代码:
Sheet1.Shapes("BoxForZoom").Visible = True Sheet1.Shapes("BoxForZoom").Select ActiveWindow.Zoom = True Sheet1.Shapes("BoxForZoom").Visible = False