Тема: Взаимодействие Word и Excel

Доброго времени суток.
Подскажите пожалуйста. В Ворде пишу макрос. Необходимо данные из ячеек Excel занести в Ворд. Ссылку на Excel я установил. Программа читает и заносит в массив занные из ячеек в массив. Excel я програмно закрываю и удаляю все ссылки. Но дальше программа завершается. В ворд данные из массива не заносятся. Как мне его активировать? Я так понимаю тне надо установить ссылку на документ ворд?

Re: Взаимодействие Word и Excel

> Maxim
См. здесь:
http://www.excelguru.ca/node/10
~'J'~

Re: Взаимодействие Word и Excel

> Maxim
Добавь ссылку на библиотеку Excel
Файл Эксель должен быть закрыт
Диапазон будет вставлен в позицию курсора
Если нужно вставлять в определенное место
сначала создай Bookmark, выдели его (bmark.Select)
далее по тексту

Sub InsertExcelRange()
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim xlRange As Excel.Range
    Set xlApp = CreateObject("Excel.Application")
    With xlApp
       ' измени имя файла Excel:
        Set xlBook = .Workbooks.Open(FileName:="D:\Temp.xls", _
                        ReadOnly:=True)
        Set xlSheet = xlBook.Worksheets(1)
        xlSheet.Activate
        Set xlRange = .ActiveSheet.Range("D2:I7") '<--измени адрес диапазона ячеек
        xlRange.Select
        .Selection.Copy
        .Quit
    End With
    Set xlRange = Nothing
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
 Selection.PasteExcelTable False, False, False
End Sub

~'J'~

Re: Взаимодействие Word и Excel

Спасибо за ответ. Но вот как у меня составлен макрос
Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
  lStructSize As Long
  hwndOwner As Long
  hInstance As Long
  lpstrFilter As String
  lpstrCustomFilter As String
  nMaxCustFilter As Long
  nFilterIndex As Long
  lpstrFile As String
  nMaxFile As Long
  lpstrFileTitle As String
  nMaxFileTitle As Long
  lpstrInitialDir As String
  lpstrTitle As String
  flags As Long
  nFileOffset As Integer
  nFileExtension As Integer
  lpstrDefExt As String
  lCustData As Long
  lpfnHook As Long
  lpTemplateName As String
End Type
Private Function ShowOpen() As String
  Dim strTemp As String
  Dim VertName As OPENFILENAME
  VertName.lStructSize = Len(VertName)
  VertName.lpstrFilter = "Excel File (*.xls)" + Chr$(0) + "*.xls"
  VertName.lpstrFile = Space$(200)
  VertName.nMaxFile = 255
  VertName.lpstrFileTitle = Space$(200)
  VertName.nMaxFileTitle = 255
  VertName.lpstrInitialDir = "C:\"
  VertName.lpstrTitle = "Открытие Excel File"
  VertName.flags = 0
  If GetOpenFileName(VertName) Then
    strTemp = (Trim(VertName.lpstrFile))
    ShowOpen = Mid(strTemp, 1, Len(strTemp) - 1)
  End If
End Function
Sub Export_List()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim intCrdCnt As Integer
Dim RowCount As Integer
Dim dir1 As String
Dim vertList() As Double
Dim coord(500, 5) As String
Set xlApp = Excel.Application
dir1 = ShowOpen
Set xlBook = xlApp.Workbooks.Open(dir1)
Set xlSheet = xlBook.Sheets(1)
RowCount = xlSheet.UsedRange.Rows.Count
ReDim vertList((RowCount * 2) - 1)
RowCount = 8
For intCrdCnt = 0 To UBound(vertList)
    coord(intCrdCnt, 0) = xlSheet.Cells(RowCount, 1).Value
    coord(intCrdCnt, 1) = xlSheet.Cells(RowCount, 2).Value
    coord(intCrdCnt, 2) = xlSheet.Cells(RowCount, 3).Value
    coord(intCrdCnt, 3) = xlSheet.Cells(RowCount, 4).Value
    coord(intCrdCnt, 4) = xlSheet.Cells(RowCount, 5).Value
    coord(intCrdCnt, 5) = xlSheet.Cells(RowCount, 6).Value
    ' On Error GoTo Line
    RowCount = RowCount + 1
    If coord(intCrdCnt, 0) = "" Then
       Exit For
    End If
Next intCrdCnt
xlBook.Close
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
'До этого места все прекрасно работает, а вот следующая строка кода уже не выполняется.
Selection.TypeText Text:="АКТ"
Т.е суть программы такова. Пользователь открывает новый пустой документ Word. Запускает макрос. Выбирает Нужный ему файл Excel с данными. Например 300 строк считываются в массив. Excel закрывается. Он больше не нужен. Затем все делает Word. Ему нужно создать 300 листов. И вот тут загвоздка. Не хочет писатся даже заголовок (Акт). Помогите.

Re: Взаимодействие Word и Excel

> Maxim
После блока кода Excel просто
добавь:

DoEvents

и далее

Selection.TypeText Text:="АКТ"

~'J'~

Re: Взаимодействие Word и Excel

> Maxim
Кстати какая версия Word? 97/2000/2003/2007?
~'J'~

Re: Взаимодействие Word и Excel

Спасибо помогло. В идеале макрос должен работать в 2003 и 2007 ofiice

Re: Взаимодействие Word и Excel

> Maxim
Еще можно каждый кусок таблицы или строку
вставлять на отдельную страницу
Что-то вроде:

Do While (условие)
Selection.TypeText Text:="АКТ"
<<здесь вставляем таблицу>>
Selection.InsertBreak Type:=wdSectionBreakNextPage
Selection.EndKey Unit:=wdStory, Extend:=wdMove
Selection.TypeText Text:="АКТ"
<<здесь вставляем таблицу>>
Selection.InsertBreak Type:=wdSectionBreakNextPage
............................
и тд
Loop

~'J'~

Re: Взаимодействие Word и Excel

Примерно так я и делаю.
Только для перехода на следующий лист использую оператор
Selection.InsertBreak Type:=wdPageBreak
Скажи а что означает строка
Selection.EndKey Unit:=wdStory, Extend:=wdMove ?

Re: Взаимодействие Word и Excel

> Maxim
Занят был, извини
wdStory - весь текст файла
wdMove - следующая строка после этого текста
~'J'~

Re: Взаимодействие Word и Excel

Благодарю