0

我在 excel 中的宏从每一行读取数据,并根据该数据为每一行创建一个 word 文件。用作模板的 word 文件有书签(列中的值映射到书签)。

我让它为一行工作,但它不会遍历所有行。我使用的代码来自:http://www.wiseowl.co.uk/blog/s199/word-bookmarks.htm

这是我的代码:

Option Explicit

'change this to where your files are stored

Const FilePath As String = "C:\Files\"

Dim wd As New Word.Application

Dim SOPCell As Range

Sub CreateWordDocuments()

    'create copy of Word in memory

    Dim doc As Word.Document

    wd.Visible = True

    Dim SOPRange As Range

    'create a reference to all the people

    Range("A1").Select

    Set SOPRange = Range(ActiveCell, ActiveCell.End(xlDown)).Cells


    'for each person in list �

    For Each SOPCell In SOPRange

        'open a document in Word

        Set doc = wd.Documents.Open(FilePath & "template.doc")

        'go to each bookmark and type in details

        CopyCell "sop", 0
        CopyCell "equipment", 1
        CopyCell "component", 2
        CopyCell "step", 3
        CopyCell "form", 4
        CopyCell "frequency", 5
        CopyCell "frequencyB", 5

        'save and close this document

        doc.SaveAs2 FilePath & "SOP " & SOPCell.Value & ".doc"

        doc.Close

    Next SOPCell

    wd.Quit

    MsgBox "Created files in " & FilePath & "!"

End Sub

Sub CopyCell(BookMarkName As String, ColumnOffset As Integer)

    'copy each cell to relevant Word bookmark

    wd.Selection.GoTo What:=wdGoToBookmark, Name:=BookMarkName

    wd.Selection.TypeText SOPCell.Offset(0, ColumnOffset).Value

End Sub
4

1 回答 1

0

您似乎错过了 copyCell Sub 中的范围参数

Sub CreateWordDocuments()

    'create copy of Word in memory

    Dim doc As Word.Document
    wd.Visible = True
    Dim SOPRange As Range
    'create a reference to all the people

    Set SOPRange = Range(Range("A1"), Range("A1").End(xlDown)).Cells

    'for each person in list 

    For Each SOPCell In SOPRange
        'open a document in Word
        Set doc = wd.Documents.Open(FilePath & "template.doc")
        'go to each bookmark and type in details
        CopyCell SOPCell, "sop", 0
        CopyCell SOPCell, "equipment", 1
        CopyCell SOPCell, "component", 2
        CopyCell SOPCell, "step", 3
        CopyCell SOPCell, "form", 4
        CopyCell SOPCell, "frequency", 5
        CopyCell SOPCell, "frequencyB", 5
        'save and close this document
        doc.SaveAs2 FilePath & "SOP " & SOPCell.Value & ".doc"

        doc.Close

    Next SOPCell

    wd.Quit

    MsgBox "Created files in " & FilePath & "!"

End Sub

Sub CopyCell(rg As Range, BookMarkName As String, ColumnOffset As Integer)

    'copy each cell to relevant Word bookmark

    wd.Selection.GoTo What:=wdGoToBookmark, Name:=BookMarkName

    wd.Selection.TypeText rg.Offset(0, ColumnOffset).Value

End Sub
于 2012-10-11T23:22:47.193 回答