Можно ли задать размер страницы и поля при отправке данных из Excel в Word? - PullRequest
1 голос
/ 16 октября 2019

У меня есть код, подобный следующему:

Dim blnNewApp As Boolean
Dim wordApp As Object
Dim wordDoc As Object
Dim j As Long

Set wordApp = GetObject(, "Word.Application")

If wordApp Is Nothing Then
    Set wordApp = CreateObject("Word.Application")
    blnNewApp = True
End If

Set wordDoc = wordApp.Documents.Add()

With ThisWorkbook.Sheets(strSHEET_NAME)
    For j = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row

        strLineOfText = .Cells(j, "A").Text
    wordApp.Selection.TypeText strLineOfText
        wordApp.Selection.TypeParagraph

    Next j
End With

wordApp.Visible = True
AppActivate wordApp.Caption

Если я хочу установить размер страницы и поля в документе Word, который создается, как бы я это сделал?

1 Ответ

1 голос
/ 16 октября 2019

Размер страницы и поля являются свойствами объекта PageSetup. Обратите внимание, что такого рода информацию часто можно обнаружить, записав макрос ...

Поскольку в рассматриваемом коде используется поздняя привязка, вместо перечисления необходимо будет использовать числовые значения для размеров бумаги (wdPaperLetter, например), и значения полей необходимо будет передать в баллов .

Я адаптировал код в вопросе для демонстрации. Кроме того, я сделал дополнительные оптимизации:

  • Работа с объектами (особенно Range объекты), а не Selection (логика, подобная обходу ActiveCell и Activate в Excel -точнее)
  • Используйте объявленный объект Document и
    Dim blnNewApp As Boolean
    Dim wordApp As Object   'Word.Application
    Dim wordDoc As Object   'Word.Document
    Dim wordRange as Object 'Word.Range
    Dim j As Long

    Set wordApp = GetObject(, "Word.Application")

    If wordApp Is Nothing Then
        Set wordApp = CreateObject("Word.Application")
        blnNewApp = True
    End If

    Set wordDoc = wordApp.Documents.Add()
    Set wordRange = wordDoc.Content

    With ThisWorkbook.Sheets(strSHEET_NAME)
        For j = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row

            strLineOfText = .Cells(j, "A").Text
            wordRange.Text = strLineOfText & vbCr  'vbCr = a new paragraph
            With wordDoc.PageSetup
              .PaperSize = 2 'wdPaperLetter
              .BottomMargin = 452 'CentimetersToPoints(1.5)
              .TopMargin = 700 'CentimetersToPoints(2)
              .LeftMargin = 680 'CentimetersToPoints(2)
              .RightMargin = 680 'CentimetersToPoints(2)
            End With
        Next j
    End With

    wordApp.Visible = True
    AppActivate wordApp.Caption
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...