добраться до события в офисе
От: tyt  
Дата: 08.11.06 08:35
Оценка:
Хочу управлять офисными приложениями на VB6. GetOpenFileName открываю файл.
CreateObject("Excel.Application") открываю excel
objExcel.Workbooks.Open (OpenFile.lpstrFile) через myCell.Range. могу менять свойства и содержимое ячеек. А вот как изменить сoбытие Worksheet_SelectionChange
не знаю. Хочу при наступлении события сохранить адрес выделенного диапазона в переменной чтобы обработать данные и вставить в другой документ. В VBA просто в ProjectExplorer щелчок на Лист, и на Worksheet, а в VB6 пока не знаю. Прошу помощи.
Re: добраться до события в офисе
От: ZAMUNDA Земля для жалоб и предложений
Дата: 08.11.06 09:32
Оценка:
Здравствуйте, tyt, Вы писали:

tyt> А вот как изменить сoбытие Worksheet_SelectionChange

tyt>не знаю. Хочу при наступлении события сохранить адрес выделенного диапазона в переменной чтобы обработать данные и вставить в другой документ.
Ну вопервых неясно, зачем тебе CreateObject, когда есть References?
Вот когда запользуешь References, тогда надо будет просто в форме (или ином модуле класса) объявить модульную (сверху, под Option Explicit) переменную.

Private WithEvents objWS as Excel.Worksheet
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re[2]: добраться до события в офисе
От: Аноним  
Дата: 08.11.06 13:53
Оценка:
Здравствуйте, ZAMUNDA, c интерессом прочитал Ваш совет. Програмирую на ВБ6 уже 3 дня, и очень мало его знаю. Попробую повозиться с References но поражает мощь для офиса
lReturn = GetOpenFileName(OpenFile)
If lReturn <> 0 Then Set objExcel = CreateObject("Excel.Application"): _
'objExcel.Workbooks.Add
If lReturn <> 0 Then objExcel.Workbooks.Open (OpenFile.lpstrFile): _
objExcel.Visible = True
три строчки и открыли файл в Excel еще две открыли Word взять Workbooks(1) и вытащить из неё Worksheet легко, и это пол страницы кода. Должен же быть доступ к событиям и этого Worksheet'а.
Re[3]: добраться до события в офисе
От: ZAMUNDA Земля для жалоб и предложений
Дата: 08.11.06 16:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, ZAMUNDA, c интерессом прочитал Ваш совет. Програмирую на ВБ6 уже 3 дня, и очень мало его знаю. Попробую повозиться с References но поражает мощь для офиса

Чего-то мало вы с References возились. Они такие же как в VBA только в другом месте Project->References.
Вот например, создаю "Standart Exe" и подключаю "Microsoft Excel x.x Object Libary".

Option Explicit

Private WithEvents objWS As Excel.Worksheet

Private Sub Form_load()
    ' ... ... ...
    
    Dim lReturn As Long
    Dim objExcel As Excel.Application
    
    lReturn = GetOpenFilename(OpenFile)

    If lReturn = 0& Then
        Me.Cls
        Me.Print "Can't open file!"
        Exit Sub
    End If
    
    Set objExcel = New Excel.Application
    Set objWS = objExcel.Workbooks.Open(OpenFile.lpstrFile).Worksheets(1)
    objExcel.Visible = True
    Set objExcel = Nothing
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Dim objWB As Excel.Workbook
    
    Set objWB = objWS.Parent
    Set objWS = Nothing
    objWB.Close False
    Set objWB = Nothing
End Sub

Private Sub objWS_SelectionChange(ByVal Target As Excel.Range)
    Me.Cls
    Me.Print Target.Address(False, False, xlA1)
End Sub

Не проверял, т.к. лень с GetOpenFileName возиться...


А>три строчки и открыли файл в Excel еще две открыли Word взять Workbooks(1) и вытащить из неё Worksheet легко, и это пол страницы кода.

Открывается книга одной строчкой, а остальное можно только один раз делать, при старте приложения.
И кстати в C++ это ещё больше строчек -- там надо ещё HRESULT анализировать и создавть/уничтожать COM объекты ручками. Так что зря вы ругаетесь.

А>Должен же быть доступ к событиям и этого Worksheet'а.

Он есть -- смотрите пример мой выше.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re[4]: добраться до события в офисе
От: tyt  
Дата: 09.11.06 08:25
Оценка:
Здравствуйте, ZAMUNDA, Вы писали:

ZAM>Он есть -- смотрите пример мой выше.

С интерессом заюзал этот код. Он работает (кроме Me.Print в обработке события).Спасибо! В книге где немного говорят о VBA это называют ранним связыванием, а обращение к объекту- поздним. К недостатку раннего связывания указывают привязку к версии продукта. Интересно естьли у Worksheet что-то типа Selection.Address или подобное? И DDX похоже нет в VB6, но всеравно код на VB6 пишется быстрее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.