0

2 つの部分的に動作するコードをまとめます。

変数の下に自動的にエクスポートして保存したい「単語」というラベルの付いたワークシートがあります。

Sub CreateNewWordDoc()

Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim i As Integer
docname = Worksheets("input").Range("b10").Value

Data1 = Worksheets("word").Range("a1:d103").Value
Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
Set wrdDoc = wrdApp.Documents.Open("C:\Results\ResultsTemplate.doc")


'******THIS IS TO EDIT THE WORD DOCUMENT******
With Worksheets("word")
    CopyRangeToWord wdDoc, .Range("A1:d104")



'******THIS IS THE END TO EDIT THE WORD DOCUMENT*****


    If Dir("C:\Results\" & docname & ".doc") <> "" Then
        Kill "C:\Results\" & docname & ".doc"
    End If
    .SaveAs ("C:\Results\" & docname & ".doc")
    .Close ' close the document
End With
wrdApp.Quit ' close the Word application
Set wrdDoc = Nothing
Set wrdApp = Nothing
End Sub

この一枚目が一番好きです。これらの生成されたレポートに必要なすべての公式情報 (会社情報など) を含むテンプレートが開き、正しいファイル名で自動的に保存されて閉じます。ただし、ワークシートの「単語」からすべての情報をドキュメントのテキスト本文にコピーする方法が見つかりません。白紙の文書を保存しています。

トラブルシューティング中に、次のコードに出くわしました。

Private Sub CopyRangeToWord(ByRef wdDoc As Word.Document, rng_to_copy As Range, Optional page_break As Boolean = True)
' Will copy the range given into the word document given.
Application.StatusBar = "Copying data from " & rng_to_copy.Parent.Name & "..."
rng_to_copy.Copy
wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter
wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.Paste
Application.CutCopyMode = False
wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter
' insert page break after all worksheets except the last one
If page_break Then
    With wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range
        .InsertParagraphBefore
        .Collapse Direction:=wdCollapseEnd
        .InsertBreak Type:=wdPageBreak
    End With
End If

End Sub


Sub CopyWorksheetsToWord()

    Dim wdApp As Word.Application, wdDoc As Word.Document, ws As Worksheet
    Application.ScreenUpdating = False
    Application.StatusBar = "Creating new document..."
    Set wdApp = New Word.Application
    Set wdDoc = wdApp.Documents.Add
    docname = Worksheets("input").Range("b10").Value

    With Worksheets("word")
        CopyRangeToWord wdDoc, .Range("A1:d104")

    End With

    Set ws = Nothing
    Application.StatusBar = "Cleaning up..."
     'apply normal view
    With wdApp.ActiveWindow
        If .View.SplitSpecial = wdPaneNone Then
            .ActivePane.View.Type = wdNormalView
        Else
            .View.Type = wdNormalView
        End If
    End With

    Set wdDoc = Nothing
    wdApp.Visible = True
    Set wdApp = Nothing
    Application.StatusBar = False

End Sub

これは最初のコードとは正反対のことを行います: 新しいドキュメント (テンプレートではない) を開き、すべてのデータを完全にコピーしますが、正しいファイル名で保存または閉じません。

ワークシートの内容をコピーするためにコード セクション 1 を更新する方が簡単だと思います。

4

1 に答える 1

1
Private Sub CopyRangeToWord(ByRef wdDoc As Word.Document, rng_to_copy As Range, Optional page_break As Boolean = True)
' Will copy the range given into the word document given.
    Application.StatusBar = "Copying data from " & rng_to_copy.Parent.Name & "..."
    rng_to_copy.Copy
    wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter
    wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.Paste
    Application.CutCopyMode = False
    wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter
    ' insert page break after all worksheets except the last one
    If page_break Then
        With wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range
            .InsertParagraphBefore
            .Collapse Direction:=wdCollapseEnd
            .InsertBreak Type:=wdPageBreak
        End With
    End If


End Sub

Sub CopyWorksheetsToWord()

Dim wdApp As Word.Application, wdDoc As Word.Document, ws As Worksheet
    Application.ScreenUpdating = False
    Application.StatusBar = "Creating new document..."
    Set wdApp = New Word.Application
    Set wdDoc = wdApp.Documents.Add
    docname = Worksheets("input").Range("b10").Value


    With Worksheets("word")
        CopyRangeToWord wdDoc, .Range("A1:d104")

    With wdDoc
    .SaveAs ("C:\Results\" & docname & ".doc")
    .Close
    End With

    End With

End Sub

これは機能しますが、私のテンプレートからは開きません。それにもかかわらず、1 つのワークシートからドキュメントが作成され、定義されたセルで参照されているファイル名でディレクトリに自動的に保存されます。

于 2012-09-28T18:00:53.653 に答える