在 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?
- 我的 sheet 根据用户设置隐藏了列。因此 A1:AC1 范围内的某些列被隐藏了。我不能 select 单列,因为这个特定的列可能被隐藏了。
- 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
是否可以在没有 Select
的情况下根据屏幕分辨率设置缩放级别?
我已遵循代码:
Sheets(1).Range("A1:AC1").Select
ActiveWindow.Zoom = True
取自
所需的代码类似于:
Range("A1:AC1").Width.Zoom=True
更新。为什么我要避免Select?
- 我的 sheet 根据用户设置隐藏了列。因此 A1:AC1 范围内的某些列被隐藏了。我不能 select 单列,因为这个特定的列可能被隐藏了。
- Select离子触发事件。当然,我可以禁用这些事件,但禁用这些事件会产生一些我想避免的副作用。
这有效,但不会让你开心。
由于我们希望列 AC (即第 29 列) 可见,我们从 Zoom
= 100 开始并一次减少一步,直到 VisibleRange
:
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