Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / как в ворд поместить несколько таблиц экселя и производить по ним счет, программно? / 11 сообщений из 11, страница 1 из 1
05.09.2010, 14:25
    #36830139
VLA91MIR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в ворд поместить несколько таблиц экселя и производить по ним счет, программно?
пришла идея: открыть ворд, вставить три экселевские таблицы. В первой таблице в ячейки А1 написать "1", во второй таблице в ячейке А1 написать "1", а в третей таблице в ячейке А1 получить сумму, сколько будет? интересует код, спасибо)
...
Рейтинг: 0 / 0
05.09.2010, 16:04
    #36830216
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в ворд поместить несколько таблиц экселя и производить по ним счет, программно?
VLA91MIRпришла идея: открыть ворд, вставить три экселевские таблицы. В первой таблице в ячейки А1 написать "1", во второй таблице в ячейке А1 написать "1", а в третей таблице в ячейке А1 получить сумму, сколько будет? интересует код, спасибо)

а если оставить ввод данных и расчеты в екселе с формированием выходной формы в формате НТМ прямо из екселя
-с выбором произвольных столбцов
-в произвольном порядке столбцов
-вставкой пустых строк/столбцов

-результат просматривается начальством в НТМ
-распечатка вордом с автоподгонкой ширины листа
-каждая таблица с нового листа с автошапкой
-подгонка хвостика таблицы(чтобы влезла в лист) -правда вручную

второй вариант- связанный объект при вставке екселя в ворд. при этом никакой гибкости, наглядности и шапок на страницах
...
Рейтинг: 0 / 0
05.09.2010, 16:29
    #36830234
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в ворд поместить несколько таблиц экселя и производить по ним счет, программно?
Код: plaintext
1.
2.
3.
4.
5.
6.
'Reference to Microsoft Excel #.# Object Library
Sub test()
    Dim XLObj As Excel.Workbook
    Set XLObj = ActiveDocument.InlineShapes.AddOLEObject(ClassType:="Excel.Sheet.8").OLEFormat.Object
    XLObj.Worksheets( 1 ).Range("A1") = "Hello World!"
    MsgBox XLObj.Worksheets( 1 ).Range("A1")
End Sub
...
Рейтинг: 0 / 0
05.09.2010, 21:34
    #36830496
VLA91MIR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в ворд поместить несколько таблиц экселя и производить по ним счет, программно?
KL (XL), спасибо за ответ, но у меня выскакивает такое сообщение:
Compile error: User-defined type not defined
...
Рейтинг: 0 / 0
06.09.2010, 00:03
    #36830618
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в ворд поместить несколько таблиц экселя и производить по ним счет, программно?
VLA91MIRKL (XL), спасибо за ответ, но у меня выскакивает такое сообщение:
Compile error: User-defined type not defined
В начале кода есть комментарий: ссылка на Microsoft Excel #.# Object Library, т.е. вам нужно установить ссылку на соответствующую библиотеку в Редаторе VBE в меню Сервис>Ссылки...

Но вообще должен предупредить о том, что впоследствии будет как минимум 3 проблемы:

1. в VBA длч Word, похоже, нет метода для выхода из режима редактирования OLEObjects, т.ч. вероятно придется использовать SendKeys по окончании кода, а "сие не есть хорошо"
2. все редактирование будет происходить на глазах у пользователя со скаканием изображения по той же причине
3. у меня метод AddOLEObject создает скрытую инстанцию Excel, и процесс не завершается по окончании исполнения кода, а "сие есть просто дизастр" :-)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
'Reference to Microsoft Excel #.# Object Library
Sub test()
    Dim XLWb As Excel.Workbook
    
    Application.ScreenUpdating = False
    Set XLWb = ActiveDocument.InlineShapes.AddOLEObject( _
        ClassType:="Excel.Sheet.8").OLEFormat.Object
    
    With XLWb
        .Application.ScreenUpdating = False
        With .Sheets( 1 )
            .Name = "Test2"
            .Range("A1") =  1 
        End With
        With .Sheets.Add(After:=.Sheets(.Sheets.Count))
            .Name = "Test3"
            .Range("A1") =  2 
        End With
        With .Sheets.Add(After:=.Sheets(.Sheets.Count))
            .Name = "Main"
            .Range("A1").Formula = "=SUM('Test2:Test3'!A1)"
        End With
        .Application.ScreenUpdating = True
    End With
    
    SendKeys "{ESC}", True
    Selection.MoveRight
    
    Set XLWb = Nothing
    Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
06.09.2010, 00:11
    #36830624
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в ворд поместить несколько таблиц экселя и производить по ним счет, программно?
Предвижу вопрос: А почему не сделать так?

Код: plaintext
1.
2.
3.
4.
5.
6.
    With XLWb
        .Application.ScreenUpdating = False
        ...
        .Application.ScreenUpdating = True
        .Close False
        .Application.Quit
    End With

Отвечаю: на .Close выскакивает ошибка, а на .Application.Quit не реагирует
...
Рейтинг: 0 / 0
06.09.2010, 00:51
    #36830640
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в ворд поместить несколько таблиц экселя и производить по ним счет, программно?
Положим, 3-я проблема решаема :-)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
'Reference to Microsoft Excel #.# Object Library
Sub test()
    Dim XLApp As Excel.Application
    Dim XLWb As Excel.Workbook
    
    Set XLWb = ActiveDocument.InlineShapes.AddOLEObject(ClassType:="Excel.Sheet" & _
        strVersion & "").OLEFormat.Object
    
    With XLWb
        .Application.ScreenUpdating = False
        With .Sheets( 1 )
            .Name = "Test2"
            .Range("A1") =  1 
        End With
        With .Sheets.Add(After:=.Sheets(.Sheets.Count))
            .Name = "Test3"
            .Range("A1") =  2 
        End With
        With .Sheets.Add(After:=.Sheets(.Sheets.Count))
            .Name = "Main"
            .Range("A1").Formula = "=SUM('Test2:Test3'!A1)"
        End With
        .Application.ScreenUpdating = True
    End With
    
    SendKeys "{ESC}", True
    Selection.MoveRight
    
    Set XLApp = GetObject(, "Excel.Application")
    XLApp.Workbooks(XLWb.Name).Close
    Set XLWb = Nothing
    
    If XLApp.Workbooks.Count =  0  Then
        XLApp.Quit
    End If
    Set XLApp = Nothing
End Sub
...
Рейтинг: 0 / 0
06.09.2010, 00:58
    #36830641
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в ворд поместить несколько таблиц экселя и производить по ним счет, программно?
Жаль редактировать нельзя :-) Буду признателен если модераторы удалят предыдущий пост.

Если код запускать из окна VBE, то не там сработает SendKeys и будет ошибка с закрытием книги.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
'Reference to Microsoft Excel #.# Object Library
Sub test()
    Dim XLApp As Excel.Application
    Dim XLWb As Excel.Workbook
    
    Set XLWb = ActiveDocument.InlineShapes.AddOLEObject( _
            ClassType:="Excel.Sheet").OLEFormat.Object
    
    With XLWb
        .Application.ScreenUpdating = False
        With .Sheets( 1 )
            .Name = "Test2"
            .Range("A1") =  1 
        End With
        With .Sheets.Add(After:=.Sheets(.Sheets.Count))
            .Name = "Test3"
            .Range("A1") =  2 
        End With
        With .Sheets.Add(After:=.Sheets(.Sheets.Count))
            .Name = "Main"
            .Range("A1").Formula = "=SUM('Test2:Test3'!A1)"
        End With
        .Application.ScreenUpdating = True
    End With
    
    SendKeys "{ESC}", True
    Selection.MoveRight
    
    Set XLApp = GetObject(, "Excel.Application")
    XLApp.Workbooks(XLWb.Name).Close
    Set XLWb = Nothing
    
    If XLApp.Workbooks.Count =  0  Then
        XLApp.Quit
    End If
    Set XLApp = Nothing
End Sub
...
Рейтинг: 0 / 0
06.09.2010, 02:36
    #36830668
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в ворд поместить несколько таблиц экселя и производить по ним счет, программно?
VLA91MIRпришла идея: открыть ворд, вставить три экселевские таблицы. В первой таблице в ячейки А1 написать "1", во второй таблице в ячейке А1 написать "1", а в третей таблице в ячейке А1 получить сумму, сколько будет? интересует код, спасибо)

а ведь в задании не указано

таблицы из одной книги или нескольких
...
Рейтинг: 0 / 0
06.09.2010, 03:05
    #36830672
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в ворд поместить несколько таблиц экселя и производить по ним счет, программно?
ПЕНСИОНЕРКАVLA91MIRпришла идея: открыть ворд, вставить три экселевские таблицы. В первой таблице в ячейки А1 написать "1", во второй таблице в ячейке А1 написать "1", а в третей таблице в ячейке А1 получить сумму, сколько будет? интересует код, спасибо)

а ведь в задании не указано

таблицы из одной книги или нескольких
А еще там не сказано таблицы на одном листе или на нескольких ;)

Я это сделал из спортивного интереса, а автору останется лишь решить, хочет ли он идти по этому пути, и, если да, адаптировать код по необходимости, т.к. там есть все элементы для претворения в жизнь всех трех гипотез:

1 книга - 1 лист - 3 таблицы
1 книга - 3 листа - 3 таблицы
3 книги - 3 листа - 3 таблицы
...
Рейтинг: 0 / 0
22.08.2011, 18:42
    #37406576
VLA91MIR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в ворд поместить несколько таблиц экселя и производить по ним счет, программно?
KL (XL) большое спасибо
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / как в ворд поместить несколько таблиц экселя и производить по ним счет, программно? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]