Пара вопросов о макросах Word - PullRequest
0 голосов
/ 05 декабря 2009

Мне нужно взять список имен из Excel и вставить их в документ Word, печатая один документ на имя. Документ содержит текст и закладку под названием «имя». Код ниже.

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

Во-вторых, я не могу понять, как удалить текст, который я уже вставил в документ. Когда я вставляю текст в закладку, он добавляется после закладки, поэтому, если я продолжу добавлять имена, все они будут складываться вместе.

Может быть, с кодом это будет понятнее:

Sub insertar_nombre()
    Dim Excel As Excel.Application
    Dim Planilla As Excel.Workbook
    Dim Hoja As Excel.Worksheet

    Set Excel = CreateObject("Excel.Application")
    Dim Filename As String
    Dim fname As Variant
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        .Title = "Seleccionar Documento de Excel"
        .Show
        For Each fname In .SelectedItems
            Filename = fname
        Next
    End With
    Set Planilla = Excel.Workbooks.Open(Filename)
    Set Hoja = Planilla.Worksheets(1)
    Dim Nombre As String
    For Count = 2 To 10
        Nombre = Hoja.Cells(Count, 1).Value
        ActiveDocument.Bookmarks("name").Range.Text = Nombre
        ActiveDocument.PrintOut
    Next
End Sub

Простите, если этот код явно неправильный или что-то в этом роде, я только начинаю с этого.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2009

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

Существует более одного способа вставить закладку . Этот метод требует, чтобы закладка вставлялась путем выделения текста, а не просто путем установки курсора в определенном месте текста.

Sub insertar_nombre()

Dim xlWorkbook As Excel.Workbook
Dim xlWorksheet As Excel.Worksheet

Dim strFilename As String

Dim bkmName As Word.Range
Dim strBookmarkOriginalText As String

Dim lngRowLast As Long
Dim rngRowStart As Excel.Range
Dim rngRowEnd As Excel.Range

Dim rngNames As Excel.Range
Dim rngName As Excel.Range


'Open file dialog and only allow Excel files'
With Application.FileDialog(msoFileDialogOpen)
    .AllowMultiSelect = False
    .Title = "Seleccionar Documento de Excel"

    'Only let them select Excel files'
    .Filters.Clear
    .Filters.Add "Excel Documents (*.xls)", "*.xls"

    'Check if a file is selected'
    If .Show = True Then

        'Since AllowMultiSelect is set to False, _
            only one file can be selected'
        strFilename = .SelectedItems(1)
    Else

        'No file selected, so exit the Sub'
        Exit Sub
    End If
End With


'Set the bookmark to a Word range (not a Bookmark object)'
Set bkmName = ActiveDocument.Bookmarks("name").Range

'Save the original text of the bookmark'
strBookmarkOriginalText = bkmName.Text


'Open the Excel file'
Set xlWorkbook = Excel.Workbooks.Open(strFilename)
Set xlWorksheet = xlWorkbook.Worksheets(1)

'Range of the first cell that contains a name'
Set rngRowStart = xlWorksheet.Cells(2, 1)

'Range of the last cell in the column'
lngRowLast = xlWorksheet.Range("A65536").End(xlUp).Row
Set rngRowEnd = xlWorksheet.Cells(lngRowLast, 1)

'Range of all cells from first name cell to last name cell'
Set rngNames = xlWorksheet.Range(rngRowStart, rngRowEnd)


'Loop through the range of names'
For Each rngName In rngNames

    'Ignore any blank cells'
    If rngName <> vbNullString Then

        'Set the text of the bookmark range to the name from Excel'
        bkmName.Text = rngName

        'The above statement deleted the Bookmark, so create _
            a new Bookmark using the range specified in bkmName'
        ActiveDocument.Bookmarks.Add Name:="name", Range:=bkmName

        'Print the document'
        ActiveDocument.PrintOut
    End If
Next


'Restore the orignal value of the bookmark'
bkmName.Text = strBookmarkOriginalText
ActiveDocument.Bookmarks.Add Name:="name", Range:=bkmName

'Close the Workbook without saving'
xlWorkbook.Close SaveChanges:=False

End Sub

Надеюсь, это поможет.

0 голосов
/ 05 декабря 2009

Мне нужно взять список имен из Excel и вставить их в документ Word, печатая один документ на имя.

Почему бы вам просто не воспользоваться функцией слияния?

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