在 Excel VBA 中设置不带 select 的缩放

Setting zoom without select in Excel VBA

是否可以在没有 Select 的情况下根据屏幕分辨率设置缩放级别?

我已遵循代码:

Sheets(1).Range("A1:AC1").Select
ActiveWindow.Zoom = True

取自

所需的代码类似于:

Range("A1:AC1").Width.Zoom=True

更新。为什么我要避免Select?

  1. 我的 sheet 根据用户设置隐藏了列。因此 A1:AC1 范围内的某些列被隐藏了。我不能 select 单列,因为这个特定的列可能被隐藏了。
  2. Select离子触发事件。当然,我可以禁用这些事件,但禁用这些事件会产生一些我想避免的副作用。

这有效,但不会让你开心。

由于我们希望列 AC (即第 29 列) 可见,我们从 Zoom = 100 开始并一次减少一步,直到 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

只需测量当前 window 宽度和范围的宽度。然后您可以使用这些值来设置缩放比例。注意 - 这需要一些额外的验证和错误处理,但它应该给出基本的想法。

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

这就是我的结局。解决方案对隐藏列具有抵抗力。我不select列但形状。添加一个矩形,将其命名为 "BoxForZoom"。它的宽度应该刚好适合您的缩放。然后应用以下代码:

Sheet1.Shapes("BoxForZoom").Visible = True
Sheet1.Shapes("BoxForZoom").Select
ActiveWindow.Zoom = True
Sheet1.Shapes("BoxForZoom").Visible = False

通过创建所选单元格的更大图像(如 1.5 倍)或增加字体大小,可以轻松实现缩放:

查看此样本:Zoom the selected cells