在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
相关