在没有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?

  1. 我的表具有基于用户设置的隐藏列。 因此,范围A1:AC1中的某些列是隐藏的。 我不能select单个列,因为这个特定的列可能被隐藏。
  2. 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 
Interesting Posts