在Excel VBA中设置无选择缩放

在Excel VBA中设置无选择缩放,excel,vba,zooming,active-window,Excel,Vba,Zooming,Active Window,是否可以根据屏幕分辨率设置缩放级别,而无需选择 我遵守了守则: Sheets(1).Range("A1:AC1").Select ActiveWindow.Zoom = True 取自 所需的代码类似于: Range("A1:AC1").Width.Zoom=True 更新。为什么要避免选择? “我的工作表”具有基于用户设置的隐藏列。因此,A1:AC1范围内的某些列是隐藏的。我无法选择单个列,因为此特定列可能被隐藏 选择触发事件。当然,我可以禁用事件,但禁用事件会产生一些副作用,我希望避免这

是否可以根据屏幕分辨率设置缩放级别,而无需选择

我遵守了守则:

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

所需的代码类似于:

Range("A1:AC1").Width.Zoom=True
更新。为什么要避免选择?

  • “我的工作表”具有基于用户设置的隐藏列。因此,A1:AC1范围内的某些列是隐藏的。我无法选择单个列,因为此特定列可能被隐藏
  • 选择触发事件。当然,我可以禁用事件,但禁用事件会产生一些副作用,我希望避免这些副作用

  • 这是可行的,但不会让你快乐

    由于我们希望列AC(即第29列)可见,因此我们从
    Zoom
    =100开始,一次缩小一步,直到
    可见范围中有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
    

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

    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
    
    专用子ZoomToRange(目标范围)
    '从目标范围获取窗口。
    像窗户一样昏暗
    设置wnd=ActiveWindow
    “找出您需要扩展到的内容。
    模糊缩放与长
    缩放=100*wnd.Width/目标.Width
    '限制为最大和最小缩放级别。
    如果缩放>400,则
    wnd.Zoom=400
    ElseIf标度<10然后
    wnd.Zoom=10
    其他的
    缩放=缩放
    如果结束
    '滚动到左上角单元格
    目标。细胞(1,1)。激活
    端接头
    
    这就是我的结局。解决方案可以抵抗隐藏列。我不选择柱,而是选择形状。添加一个矩形,将其命名为“BoxForZoom”。它应该足够宽,刚好适合你的缩放。然后应用以下代码:

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

    当某些列被隐藏时,它不会通过测试。有没有可能在不取消隐藏列的情况下获得真正的范围宽度?@PrzemyslawRemin-可以,但需要通过在列上循环手动计算。如果它们没有隐藏(即
    rng.Columns(1).hidden
    ),请添加宽度。根据用户选择,该范围内的某些列可能会隐藏。我在寻找解决方案,但不回避任何问题。@PrzemyslawRemin-你不必隐藏它们<代码>如果rng.Columns(x).Hidden=False,则宽度=宽度+rng.Columns(x).width
    相关