Размер "рабочей части" страницы MS Excel

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Bikutoru
Сообщения: 16
Зарегистрирован: 13 авг 2004, 15:56

Здраствуйте
У меня такая проблема: есть некий граф, состоящий из набора элементов и соединительных линий между ними. Необходимо раздвинуть его элементы таким образом, чтобы при печати они (элементы) не оказывались на двух бумажных листах сразу. Но тут и появилась проблема: мое решение привязано к ширине бумажного листа в точках, а его _правильно_ определить у меня не получается. Я пробовал так:
рабоая ширина = общая ширина листа (формат всегда А4) - правое поле - левое поле
Но вот почему-то это не есть так... Полученное значение немного но меньше, чем то "рабочее пространство" листа...
Может кто-нибудь знает в чем тут дело и как получить действительную ширину листа?
Не ошибается тот, кто ниченго не делает...
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Для начала попробуйте обойтись параметрами страницы. Раздвиньте узлы графа пошире, а затем определите в параметрах страницы, масштабирование (например, "не более чем на 2 листах в ширину")

Сейчас нет под рукой Excel-я но во вторник посмотрю, что там можно сделать.
Bikutoru
Сообщения: 16
Зарегистрирован: 13 авг 2004, 15:56

Naeel Maqsudov, спасибо за ответ...
Раздвиньте узлы графа пошире
Пока так и приходится делать...
затем определите в параметрах страницы, масштабирование (например, "не более чем на 2 листах в ширину")
К сожалению это не выход - элементы графа содержат текст и одно из основных требований - удобочитаемость этого текста, а ширина графа при масштабировании 100% достигает 5-6 листов...

И ещё приведу фрагмент кода - может я что-то не так делаю

Код: Выделить всё

Private Const PrintMarginScale As Double = (1 / 25.4)

Public Sub UseCurrentPageSetup(App As Excel.Application, WrkSheet As WorkSheet)
    
    With WrkSheet.PageSetup
        .LeftMargin = App.InchesToPoints(PrintMarginScale * PrintLeftMargin)
        .RightMargin = App.InchesToPoints(PrintMarginScale * PrintRightMargin)
        .TopMargin = App.InchesToPoints(PrintMarginScale * PrintTopMargin)
        .BottomMargin = App.InchesToPoints(PrintMarginScale * PrintBottomMargin)
        .HeaderMargin = App.InchesToPoints(PrintMarginScale * PrintHeaderMargin)
        .FooterMargin = App.InchesToPoints(PrintMarginScale * PrintFooterMargin)
        .Orientation = PrintPageOrientation
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlOverThenDown
        
    End With

End Sub


Public Sub GetPageSizes(ExcelApp As Excel.Application, ByRef WS As WorkSheet, ByRef Width As Integer, ByRef Height As Integer)

    Dim FullWidth As Double
    Dim FullHeight As Double
    
    'Размер листа всегда А4
    If (PrintPageOrientation = xlLandscape) Then
        FullWidth = 297#
        FullHeight = 210#
    Else
        FullWidth = 210#
        FullHeight = 297#
    End If
    
    FullWidth = FullWidth - (PrintLeftMargin + PrintRightMargin)
    FullHeight = FullHeight - (PrintTopMargin + PrintBottomMargin)
        
    Width = Round(ExcelApp.CentimetersToPoints( _
        FullWidth / 10#) / EXCEL_COEF)
    Height = Round(ExcelApp.CentimetersToPoints( _
        FullHeight / 10#) / EXCEL_COEF)
            
End Sub
Параметры PrintTopMargin, PrintFooterMargin и им подобные - соответствующие значения в мм.

Заранее спасибо
Не ошибается тот, кто ниченго не делает...
Ответить