2015-04-18 2 views
0

У меня есть Excel VBA для копирования и вставки из Excel в Word. Код для изменения межстрочного интервала работает отлично, но код для изменения полей не работает.Изменение полей в документе Word.Application из Excel

Option Explicit 

Sub CopyXLStoDOC() 

' **************************************************************************** 
' *  Make sure to set a reference to Microsoft Word Object Library!!! * 
' **************************************************************************** 

' Source of code: http://mrspreadsheets.com/1/post/2012/09/vba-code-snippet.html 

    'declare local variables and constants 
    Dim oDoc As Word.Document 
    Dim oWord As Word.Application 
    Dim rRange1 As Range, rRange2 As Range 
    Const sDocPath As String = "D:\Corinne\5 RALF WORK\A_RALFS Jobs\Document2.docx" 

    'set ranges to copy 
    Set rRange1 = Worksheets("4_Data Form").Range("B2:K68") 
    Set rRange2 = Worksheets("4_Transport").Range("C13:J53") 

    'open the Word document, if it doesn't exist, then create one 
    On Error Resume Next 
    Set oDoc = GetObject(sDocPath) 
    Set oWord = oDoc.Parent 
    If Err <> 0 Then 
     Set oWord = CreateObject("Word.Application") 
     Set oDoc = oWord.Documents.Add 
    End If 
    oWord.Visible = True 

    'Change Word sheet settings 

    'set Page Setup properties - Page Orientation, Page Size & Margins: 


    With oWord.ActiveDocument.PageSetup 
     .TopMargin = CentimetersToPoints(1.8) 
     .BottomMargin = CentimetersToPoints(1.8) 
     .LeftMargin = CentimetersToPoints(1.8) 
     .RightMargin = CentimetersToPoints(1.8) 
    End With 


    'copy and paste first range into Word 
    rRange1.Copy 
    oDoc.ActiveWindow.Selection.Paste 


    'copy and paste second range into Word after pagebreak 
    rRange2.Copy 
    'remove the next line if you want to paste rRange2 directly after rRange1 
    oDoc.ActiveWindow.Selection.InsertBreak Type:=wdPageBreak 
    oDoc.ActiveWindow.Selection.Paste 



    With oDoc.Content.ParagraphFormat 
     .LineSpacingRule = wdLineSpaceSingle 
     .SpaceAfter = 0 
     .SpaceAfter = False 
    End With 


    'Clean up objects 
    Set oDoc = Nothing 
    Set rRange1 = Nothing 
    Set rRange2 = Nothing 

End Sub 

ответ

0

При копировании и вставке диапазона из Excel в документ Word он вводится в виде таблицы. В результате таблица установит свои собственные поля, чтобы соответствовать данным в вставленных столбцах. Вероятно, вам придется получить ссылку на итоговую таблицу и формат, который:

'... 

'copy and paste first range into Word 
rRange1.Copy 
oDoc.ActiveWindow.Selection.Paste 

With oDoc.Tables(1) 
    'apply table formatting here. 
End With 

'copy and paste second range into Word after pagebreak 
rRange2.Copy 
'remove the next line if you want to paste rRange2 directly after rRange1 
oDoc.ActiveWindow.Selection.InsertBreak Type:=wdPageBreak 
oDoc.ActiveWindow.Selection.Paste 

With oDoc.Tables(2) 
    'apply table formatting here. 
End With 

'... 
+0

Спасибо, это поможет мне теперь узнать, что контролирует форматирование во время действия copy/paste – CorinneGermany

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