Страница 1 из 1

Макрос для Microsoft Excel Worksheet в документе Microsoft Word

Добавлено: 17 июл 2008, 22:49
AleksP
Как, используя макросы в Microsoft Word:

1) Установить заданное число строк и столбцов для Microsoft Excel WorkSheet?
2) Присвоить значения ячейкам Microsoft Excel WorkSheet?

Запись макроса в Microsoft Word дает следующий код:

Код: Выделить всё

Sub Macro1()
'
' Macro1 Macro
' Macro recorded 7/17/2008 by
'
    Selection.InlineShapes.AddOLEObject ClassType:="Excel.Sheet.8", LinkToFile _
        :=False, DisplayAsIcon:=False
End Sub

Re: Макрос для Microsoft Excel Worksheet в документе Microsoft Word

Добавлено: 19 июл 2008, 09:54
EducatedFool
По поводу второй части вопроса (Присвоить значения ячейкам Microsoft Excel WorkSheet)
Попробуйте такой код:

Код: Выделить всё

Sub Fill_Excel_Table_in_Winword()
    Dim ish As InlineShape, wb As Excel.Workbook, sh As Excel.Worksheet
    
    Set ish = Selection.InlineShapes.AddOLEObject(ClassType:="Excel.Sheet.8", FileName:= "", LinkToFile:=False, DisplayAsIcon:=False)
    
        Set wb = ish.OLEFormat.Object ' возвращает книгу excel
        Set sh = wb.Worksheets(1)
        
        For i = 1 To 5
            For j = 1 To 6
                sh.Cells(i, j).Value = "Cell " & i & " - " & j
            Next
        Next
    
    Set sh = Nothing: Set wb = Nothing: Set ish = Nothing
End Sub
Возможно, где-то и закралась ошибка, но у меня этот код работает без проблем.

С первой частью вопроса посложнее, но, имея доступ к внедрённому листу excel (объект sh) и объекту InlineShape, можно путём изменения ширины столбцов и высоты строк на листе excel, а также управляя шириной и высотой объекта InlineShape (свойства ish.Height и ish.Width), достичь желаемого результата.

Re: Макрос для Microsoft Excel Worksheet в документе Microsoft Word

Добавлено: 20 июл 2008, 14:51
AleksP
To EducatedFool: Спасибо, этот код у меня тоже работает.

Первая часть вопроса не важна, потому что необходимо заполнить только первые два столбца WorkSheet, чтобы построить график, используя Microsoft Excel Chart.

Проблема возникает, если не создавать каждый раз объект Microsoft Excel WorkSheet, а использовать в качестве шаблона документ Word с объектом Microsoft Excel WorkSheet. Как в этом случае получить доступ к ячейками WorkSheet?

Если запустить редактор Microsoft Visual Basic (Alt+F11) из документа Word, в иерархии объектов будет только ThisDocument. Если запустить редактор Microsoft Visual Basic, когда Microsoft Excel WorkSheet документа Word находится в режиме Edit, появится WorkSheet in Document1.

Как связать это воедино?

Re: Макрос для Microsoft Excel Worksheet в документе Microsoft Word

Добавлено: 20 июл 2008, 15:30
EducatedFool
AleksP писал(а): Проблема возникает, если не создавать каждый раз объект Microsoft Excel WorkSheet, а использовать в качестве шаблона документ Word с объектом Microsoft Excel WorkSheet. Как в этом случае получить доступ к ячейками WorkSheet?


Вот что получилось:

Код: Выделить всё

Sub Get_Existed_Excel_Table_in_Winword_Document()
    Dim ish As InlineShape, wb As Excel.Workbook, sh As Excel.Worksheet
    Dim ole As OLEFormat
    
    For Each ish In ActiveDocument.InlineShapes ' перебираем все объекты InlineShape в активном документе
        If ish.Type = wdInlineShapeEmbeddedOLEObject Then' сначала проверяем тип
            Set ole = ish.OLEFormat
            If ole.ClassType = "Excel.Sheet.8" Then' если объект - это книга Excel
                Set wb = ole.Object 'возвращает книгу excel
                Set sh = wb.Worksheets(1)
                
                For i = 1 To 5
                    For j = 1 To 6
                        sh.Cells(i, j).Value = i & " - " & j ' тут пишем код обработки книги
                    Next
                Next
                Set sh = Nothing: Set wb = Nothing: Set ole = Nothing: Set ish = Nothing
            End If
        End If
    Next
End Sub
Если запустить редактор Microsoft Visual Basic (Alt+F11) из документа Word, в иерархии объектов будет только ThisDocument. Если запустить редактор Microsoft Visual Basic, когда Microsoft Excel WorkSheet документа Word находится в режиме Edit, появится WorkSheet in Document1.

Как связать это воедино?


Не совсем понял, что именно требуется связать воедино...

Re: Макрос для Microsoft Excel Worksheet в документе Microsoft Word

Добавлено: 20 июл 2008, 21:04
AleksP
To EducatedFool: На одном компьютере код работает, на другом появляется сообщение об ошибке: Run-time error '430': Class does not support Automation or does not support expected interface.

Конфигурация компьютеров:
Код работает: Windows XP Home Edition SP2, Microsoft Office XP.
Код не работает: Windows XP Home Edition SP2, Microsoft Word Standart Edition 2003 for Students and Teachers.

В интернете пишут, что проблема может быть связана с версией MDAC. На обоих компьютерах установлен MDAC 2.8 SP1.

Re: Макрос для Microsoft Excel Worksheet в документе Microsoft Word

Добавлено: 21 июл 2008, 00:57
Aent
MDAC тут явно не при делах.
А вот "for Students and Teachers" да ещё криво поломанный вполне способен дать подобный эффект

Re: Макрос для Microsoft Excel Worksheet в документе Microsoft Word

Добавлено: 21 июл 2008, 10:40
EducatedFool
AleksP писал(а): На одном компьютере код работает, на другом появляется сообщение об ошибке: Run-time error '430': Class does not support Automation or does not support expected interface.


У меня тоже появлялась эта ошибка, но только один раз. (WinXPsp2, Office2003Rus)
Я перевёл внедрённый объект Excel в режим Edit (щелчком мыши), после чего сообщение об ошибке пропало раз и навсегда (код работал при любом режиме внедрённого объекта). Я подумал, что это был случайный глюк Excel, но, как выясняется, не всё так просто...

Re: Макрос для Microsoft Excel Worksheet в документе Microsoft Word

Добавлено: 21 июл 2008, 17:44
AleksP
А можно программно перевести объект Excel Worksheet в режим Edit используя VBA?