Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2013, 02:32   #1
w00t
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 29
Печаль Zoom (!)

Не получается. Нужно для выделенной области показать предпросмотр. При этом выделенный текст вписать на 1 страницу. При этом, если вписываемая табличка меньше размера листа - нужно ее растянуть на лист. Если больше - то просто вписать (это проще). Вот не получается с маленькими табличками выделенными, как их растянуть на экран. Зум задать не фиксированный, а чтобы он подбирался, в зависимости от области выделения.

Как это можно осуществить?

Код:
Option Explicit 
 
Sub PrintIt() 
     '
    Dim ans As String, rPrintArea As Range 
    On Error Resume Next 
    Application.DisplayAlerts = False 
    Set rPrintArea = Application.InputBox(Prompt:="Use Mouse to select area to Print.", Title:="Select Print Area", Type:=8) 
    On Error Goto 0 
    Application.DisplayAlerts = True 
    If rPrintArea Is Nothing Then Exit Sub 
    With ActiveSheet.PageSetup 
        .PrintTitleRows = "" 
        .PrintTitleColumns = "" 
    End With 
     
    ActiveSheet.PageSetup.PrintArea = rPrintArea.Address 
    Application.PrintCommunication = False 
    With ActiveSheet.PageSetup 
        .CenterVertically = False 
        .Orientation = xlPortrait 
        .PaperSize = xlPaperA4 
        .Zoom = True 
        .FitToPagesWide = 1 
        .FitToPagesTall = 1 
    End With 
    ans = MsgBox(Prompt:="Yes to Print." & vbCrLf & "No to Preview." & vbCrLf & "Cancel To Abort", Buttons:=vbYesNoCancel, Title:="Print?") 
    If ans = vbCancel Then Exit Sub 
    If ans = vbYes Then 
        rPrintArea.PrintOut 
    Else 
        rPrintArea.PrintOut Preview:=True, Collate:=True 
    End If 
End Sub
w00t вне форума Ответить с цитированием
Старый 20.11.2013, 08:43   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

вот такой код выставляет по выделенной области:

Код:
Sub Zoom()
    W = 0: For Each Cl In Selection.Columns: W = W + Cl.Width + Cl.Borders(xlEdgeLeft).Weight + Cl.Borders(xlEdgeRight).Weight: Next Cl
    H = 0: For Each Rw In Selection.Rows: H = H + Rw.Height + Rw.Borders(xlEdgeTop).Weight + Rw.Borders(xlEdgeBottom).Weight: Next Rw
    With ActiveSheet.PageSetup
        M1 = Round(Application.InchesToPoints(21 / 2.54) - (.LeftMargin + .RightMargin)) / W
        M2 = Round(Application.InchesToPoints(29.7 / 2.54) - (.TopMargin + .BottomMargin)) / H
        .PrintArea = Selection.Address
        .Zoom = IIf(M1 < M2, M1, M2) * 100
    End With
End Sub
upd. немного поправил
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 20.11.2013 в 09:04.
DiemonStar вне форума Ответить с цитированием
Старый 20.11.2013, 10:28   #3
w00t
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 29
По умолчанию

Ругается на переменные, начиная с "W". (Cl, H, Rw). Подскажите, пожалуйста, как их правильно объявить, ширину, высоту, строчку, столбец.
w00t вне форума Ответить с цитированием
Старый 20.11.2013, 10:55   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

например так:

Код:
Dim H, W, Cl, Rw, M1, M2
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 20.11.2013, 11:00   #5
w00t
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 29
По умолчанию

Извините, что вас пытаю, но у меня как-то пока не выходит, наверное, нужно больше кофе... Найду решение - приложу.
Изображения
Тип файла: jpg Скриншот 2013-11-20 10.57.45.jpg (28.9 Кб, 119 просмотров)
Тип файла: jpg Скриншот 2013-11-20 10.58.12.jpg (36.7 Кб, 130 просмотров)

Последний раз редактировалось w00t; 20.11.2013 в 11:23.
w00t вне форума Ответить с цитированием
Старый 21.11.2013, 22:17   #6
w00t
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 29
По умолчанию

Все было ок.. это я ошибся. Немного иной вариант того же

Код:
Option Explicit
Sub PrintIt()
    Dim H, W, Cl, Rw, M1, M2
    Dim ans As String, rPrintArea As Range
    Application.DisplayAlerts = False
    Set rPrintArea = Application.InputBox(Prompt:="Use Mouse to select area to Print.", Title:="Select Print Area", Type:=8)
    On Error GoTo 0
    W = 0: For Each Cl In rPrintArea.Columns: W = W + Cl.Width + Cl.Borders(xlEdgeLeft).Weight + Cl.Borders(xlEdgeRight).Weight: Next Cl
    H = 0: For Each Rw In rPrintArea.Rows: H = H + Rw.Height + Rw.Borders(xlEdgeTop).Weight + Rw.Borders(xlEdgeBottom).Weight: Next Rw
    Application.DisplayAlerts = True
    If rPrintArea Is Nothing Then Exit Sub
    Application.PrintCommunication = False  'Can only be used in xl2010
    With ActiveSheet.PageSetup
        On Error GoTo ErrorHandler
        M1 = Round(Application.InchesToPoints(21 / 2.54) - (.LeftMargin + .RightMargin)) / W
        M2 = Round(Application.InchesToPoints(29.7 / 2.54) - (.TopMargin + .BottomMargin)) / H
        .Orientation = xlLandscape
        .PaperSize = xlPaperA4
        .LeftMargin = 27                     '72 points per inch
        .RightMargin = 27
        .PrintArea = rPrintArea.Address
        .Zoom = IIf(M1 < M2, M1, M2) * 100
        '.FitToPagesTall = False
        '.FitToPagesWide = 1
    End With
    Application.PrintCommunication = True
    ans = MsgBox(Prompt:="Yes to Print." & vbCrLf & "No to Preview." & vbCrLf & "Cancel To Abort", Buttons:=vbYesNoCancel, Title:="Print?")
    If ans = vbCancel Then Exit Sub
    If ans = vbYes Then
        rPrintArea.PrintOut
    Else
        rPrintArea.PrintOut Preview:=True, Collate:=True
    End If
    Exit Sub
ErrorHandler:
    ActiveSheet.PageSetup.Zoom = 400
    rPrintArea.PrintOut Preview:=True, Collate:=True
End Sub
w00t вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Zoom в делфи. Rockot Общие вопросы Delphi 2 14.01.2013 04:50
Chart + Zoom WorldMaster C# (си шарп) 0 04.11.2012 23:24
zoom по горизонтали tchart sautina Компоненты Delphi 2 13.07.2012 23:50
JS + CSS zoom Gennadiy JavaScript, Ajax 1 12.05.2012 14:23
Создание zoom'а в Timage KsandrXXX Общие вопросы Delphi 2 04.09.2008 23:21