2009-12-05 3 views
0

Мне нужно захватить список имен из Excel и вставить их в документ Word, распечатав один документ на имя. В документе есть текст и закладка под названием «имя». Код ниже.Несколько вопросов о макросах 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 

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

ответ

0

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

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

+0

Я знаю об этом, я просто хотел сделать это вручную для удовольствия. – Javier

0

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

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

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 

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

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