Каждая новая строка должна создавать независимый текстовый документ в том же формате - PullRequest
0 голосов
/ 24 мая 2018

У меня есть следующий код, который заполняет шаблон документа Word.Что я хочу сделать, так это создать новый документ для каждой строки при заполнении листа.

Я попытался изменить закладку Range, добавив

Range("e5").Select
Do Until ActiveCell.Value = ""
loop

Но в целомразбился ...

Sub CreateWR()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Dim objword As Object
    Set objword = CreateObject("Word.Application")
    objword.Visible = True

    objword.Documents.Open ("C:\User\Documents\FileControl\template.doc")
    With objword.ActiveDocument
    .Bookmarks("PropertyName").Range.Text = ws.Range("a2").Value
    .Bookmarks("ProjectNumber").Range.Text = ws.Range("b2").Value
    .Bookmarks("BudgetNumber").Range.Text = ws.Range("c2").Value
    .Bookmarks("ProjecName").Range.Text = ws.Range("d2").Value
    .Bookmarks("Vendor_1").Range.Text = ws.Range("e2").Value
    .Bookmarks("Price_1").Range.Text = ws.Range("f2").Value
    .Bookmarks("Vendor_2").Range.Text = ws.Range("g2").Value
    .Bookmarks("Price_2").Range.Text = ws.Range("h2").Value
    .Bookmarks("Vendor_3").Range.Text = ws.Range("i2").Value
    .Bookmarks("Price_3").Range.Text = ws.Range("j2").Value
    .Bookmarks("Vendor_1_2").Range.Text = ws.Range("e2").Value
    .Bookmarks("RequestedBy").Range.Text = ws.Range("m2").Value

    End With
End Sub

1 Ответ

0 голосов
/ 24 мая 2018

Это не ваше окончательное решение, так как не на 100% ясно, какое должно быть верхнее значение для счетчика строк, но чтобы дать вам старт, см. Ниже.

For возвращает числорядов.На данный момент я поместил 5, чтобы вы могли проверить, работают ли основы.

Документ создается внутри этого цикла.Обратите внимание, что Open был изменен на Add, чтобы создать новый документ из шаблона.Кроме того, переменная объекта objDoc объявляется вверху, и новый документ назначается ей.Это также используется для адресации закладок, а не ActiveDocument.В конце цикла objDoc устанавливается на Nothing при подготовке к следующей итерации.

rowCounter был заменен статическими значениями строки в исходном коде, поэтому каждый цикл будет перемещатьсяв следующий ряд.

Sub CreateWR()        
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Dim rowCounter as Long
    Dim objword As Object
    Dim objDoc as Object
    Set objword = CreateObject("Word.Application")
    objword.Visible = True

    For rowCounter = 2 to 5
      Set objDoc = objword.Documents.Add ("C:\User\Documents\FileControl\template.doc")
      With objDoc
        .Bookmarks("PropertyName").Range.Text = ws.Range("a" & CStr(rowCounter)).Value
        .Bookmarks("ProjectNumber").Range.Text = ws.Range("b" & CStr(rowCounter)).Value
        .Bookmarks("BudgetNumber").Range.Text = ws.Range("c" & CStr(rowCounter)).Value
        .Bookmarks("ProjecName").Range.Text = ws.Range("d" & CStr(rowCounter)).Value
        .Bookmarks("Vendor_1").Range.Text = ws.Range("e" & CStr(rowCounter)).Value
        .Bookmarks("Price_1").Range.Text = ws.Range("f" & CStr(rowCounter)).Value
        .Bookmarks("Vendor_2").Range.Text = ws.Range("g" & CStr(rowCounter)).Value
        .Bookmarks("Price_2").Range.Text = ws.Range("h" & CStr(rowCounter)).Value
        .Bookmarks("Vendor_3").Range.Text = ws.Range("i" & CStr(rowCounter)).Value
        .Bookmarks("Price_3").Range.Text = ws.Range("j" & CStr(rowCounter)).Value
        .Bookmarks("Vendor_1_2").Range.Text = ws.Range("e" & CStr(rowCounter)).Value
        .Bookmarks("RequestedBy").Range.Text = ws.Range("m" & CStr(rowCounter)).Value
      End With
      Set objDoc = Nothing
    Next
End Sub
...