2016-09-05 9 views
4

Возможно ли установить уровень масштабирования на основе разрешения экрана без Select?Настройка увеличения без выбора в Excel VBA

Я следовал коду:

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

взят из https://stackoverflow.com/a/19439177/1903793

Желаемого кода будет что-то вроде:

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

Update. Почему я хочу избежать выбора?

  1. В моем листе есть скрытые столбцы на основе пользовательских настроек. Поэтому некоторые столбцы диапазона A1: AC1 скрыты. Я не могу выбрать один столбец, потому что этот конкретный столбец может быть скрыт.
  2. Выбор событий триггеров. Конечно, я могу отключить события, но отключение событий имеет некоторые побочные эффекты, которых я хочу избежать.
+0

связанного http://stackoverflow.com/questions/9414426/excel-2007-vba-zooming-without-using-select – Raystafarian

ответ

0

Это то, что я получил. Решение устойчиво к скрытым колонкам. Я не выбираю столбцы, но форма. Добавьте прямоугольник, назовите его «BoxForZoom». Он должен быть достаточно широким для вашего увеличения. Затем примените следующий код:

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

Это работает, но не сделает вас счастливым.

Поскольку мы хотим колонки переменного тока(что колонка 29), чтобы быть видимыми, мы начинаем с Zoom = 100 и уменьшить его на один шаг в то время, пока не останется 29 + 1 столбцов в 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 
2

Просто измерьте ширину текущего окна и ширину диапазона. Затем вы можете использовать эти значения для установки коэффициента масштабирования. Примечание. Для этого требуется дополнительная проверка и обработка ошибок, но она должна дать основную идею.

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 
+0

Это не проходит тест, когда некоторые столбцы скрыты , Можно ли получить истинную ширину диапазона без скрытия скрытых столбцов? –

+0

@PrzemyslawRemin - Вы можете, но вам нужно будет вычислить его вручную, перейдя по столбцам. Если они не скрыты (т. Е. «Rng.Columns (1) .Hidden»), добавьте ширину. – Comintern

+0

Некоторые столбцы в диапазоне могут быть скрыты в зависимости от выбора пользователя. Я ищу решение без каких-либо ограничений. –

 Смежные вопросы

  • Нет связанных вопросов^_^