Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Excel VBA не любит Access, ... / 16 сообщений из 16, страница 1 из 1
20.03.2016, 01:16
    #39196272
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
... или у меня сегодня лыжи не едут?

Пытался в качестве библиотеки EXCEL VBA проекта подключить MDB-шку, говорит невкусно!

Ладно, подключил библиотеку Access, далее:
Код: vbnet
1.
2.
3.
4.
5.
6.
    With New Access.Application
        .OpenCurrentDatabase Workbooks(1).Path & "\FileName.mdb"
        .Visible = True
        .DoCmd.OpenForm "frmName"
        Set frm = .Forms("frmName").Form
    End With



Access, форма открываются, вопросов нет.

А вот при попытке подписаться на события интерфейса Form:
Код: vbnet
1.
Private WithEvents frm As Access.Form


опять получаю фиг вам на строке:
Код: vbnet
1.
Set frm = .Forms("frmName").Form


Без подписки на события - все гуд.
(модуль правильный)

Как побороть сию напасть?
Нужно в лист книги данные возвернуть в три не смежные ячейки.

Спасибо.
...
Рейтинг: 0 / 0
20.03.2016, 03:04
    #39196286
Вакшуль Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
Predeclared, добрый вечер

Попробовал связку в Access 2010 + Excel 2010.
В Excel поставил ссылку на библиотеку Access 14.

В модуль листа положил код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Option Explicit
Private WithEvents frm As Access.Form


Sub Кнопка1_Щелчок()
    With New Access.Application
        .OpenCurrentDatabase "C:\Users\Vakshul\Documents\Access\Lib\Lib.accdb"
        .Visible = True
        .DoCmd.OpenForm "Form1"
        Set frm = .Forms("Form1").Form
    End With
End Sub

Private Sub frm_Close()

End Sub



По закрытии формы сработал перехват события frm_Close.

Наверно вопрос излишний, но все же:
Private WithEvents frm As Access.Form
должно быть в модуле класса. Не в этом дело?
...
Рейтинг: 0 / 0
20.03.2016, 03:21
    #39196287
Вакшуль Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
забыл сказать,
в той форме, на обработчик закрытия которой я подписался, OnClose должен быть установлен в "[Event Procedure]".
иначе действительно событие не вызывается

на mdb тоже проверил - работает
...
Рейтинг: 0 / 0
20.03.2016, 05:29
    #39196296
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
Сергей, доброго утра.

Вот ведь в чем и засада.

И модуль правильный,
и у формы модуль имеется,
и "[Event Procedure]" на OnClose имеется,
а лыжи не едут.
:)

Automation Error на Set frm=..., и хоть ты тресни.

Я уж и Excel-евский файлик поменял, и Access-ный на пустышку с одной формой.
...
Рейтинг: 0 / 0
20.03.2016, 05:35
    #39196297
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
Проверил на виртуалке с 2007 - работает.
Значит у меня офис приболел.
...
Рейтинг: 0 / 0
20.03.2016, 11:52
    #39196373
Вакшуль Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
Predeclared,

вот, вспомнил, давно дело было :)
когда писали в 2000-ом, то при работе с библиотечной базой, были какие-то проблемы, если имя проекта(не имя файла, а именно именно имя проекта - то, что задается в редакторе кода в свойствах) было указано на русском. Проблемы исчезали, если не использовать кириллицу. По-моему, это как раз тот случай.
В 2010-ом сейчас этого не наблюдаю, но тогда было.

Кстати, проекты скомпилированы?
...
Рейтинг: 0 / 0
20.03.2016, 12:53
    #39196391
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
Эти хохмочки я еще пока помню :)

Имена проектов разные, оба на аглицком, скомпилированы.
Имена модулей не пересекаются с именами проектов.

Даже имена листов и модулей листов переписал по-аглицки.
...
Рейтинг: 0 / 0
20.03.2016, 13:08
    #39196396
Вакшуль Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
Predeclared,

да, не понятно. Вроде уже ни к чему не придерешься.
ну раз что попробовать заменить New Access.Application на CreateObject
...
Рейтинг: 0 / 0
20.03.2016, 13:16
    #39196400
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
Пробовал, не помогает.

Все так-же Automation Error -2147220990 (80040202)
...
Рейтинг: 0 / 0
20.03.2016, 16:02
    #39196477
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
"Если гора не идет ..." (с)
Пока наметился такой изворот,
в некотором плане даже более удобный.
Код: vbnet
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.
37.
38.
39.
Private WithEvents btn As Office.CommandBarButton
Private WithEvents btnShow As Office.CommandBarButton

Private Sub btn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
    With ActiveCell
        .Value = btn.Application.Forms("Prices").Form.Name
        Cells(.Row + 1, .Column).Activate
    End With
End Sub

Private Sub btnShow_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
    With CreateObject("Access.Application")
        .OpenCurrentDatabase Workbooks(1).Path & "\Library.mdb"
        .DoCmd.OpenForm "Prices"
        With .CommandBars.Add("Excel Automation", 4, , True)
            Set btn = .Controls.Add(1, , , , True)
            With btn
                .Caption = "Return Result"
                .Style = 2
            End With
            .Protection = msoBarNoChangeDock + msoBarNoCustomize
            .Visible = True
        End With
        
        .Visible = True
    End With
End Sub

Private Sub Workbook_Open()
    With Application.CommandBars.Add("Access", 4, , True)
        Set btnShow = .Controls.Add(1, , , , True)
        With btnShow
            .Caption = "Show Access"
            .Style = 2
        End With
        .Protection = msoBarNoChangeDock + msoBarNoCustomize
        .Visible = True
    End With
End Sub

...
Рейтинг: 0 / 0
20.03.2016, 16:14
    #39196485
Вакшуль Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
а события формы btn.Application.Forms("Prices") ловятся?
вроде в этом была цела?
...
Рейтинг: 0 / 0
20.03.2016, 16:37
    #39196501
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
Нет.
Не дает подписаться с событиями, ни на форму, ни на ее кнопки.

В новом варианте они (подписки на форму, ее контролы) и не нужны.
Я получаю ссылку на форму через ссылку на кнопку CommandBar-а.
При закрытии формы Access.Application благополучно сам падает.

В Access-проекте вообще ничего менять не нужно.
Это пока ободряет. :)
...
Рейтинг: 0 / 0
20.03.2016, 21:08
    #39196590
Вакшуль Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
Андрей, я вот тут думаю, как можно обойти этот глюк, когда события форм библиотечного файла mdb отслеживать надо, но возможности такой нет, как у вас.

Excel у вас не позволяет слушать события Access, но если у вас из Access возможно слушать события листа книги Excel, то можно сделать следующее.

В библиотечном файле mdb создать класс наподобие clsAppMonitor, который я высылал раньше. Т.е. сделать систему мониторинга событий форм приложения(если использовать мой clsAppMonitor, то его нужно будет расширить дополнительными событиями, это несложно).
Класс clsAppMonitor следит за событиями форм и в ответ генерирует свои события. Так вот, если вы в clsAppMonitor(или, лучше в подписчика на события этого класса, какую-нибудь служебную скрытую форму) закинете объектную переменную типа Worksheet(технологический скрытый от пользователя лист), то вот что это дает. Когда clsAppMonitor генерирует какое-нибудь событие, например, Current, то вы из Access на этом событии вбрасываете в Worksheet, например, в ячейку "A1" значение, идентифицирующее происходящее событие(например, "Current"), а в "B1" идентификатор формы (например, дескриптор ее окна). На это уже сам Excel отвечает генерацией события листа Change. А вы уже из Excel, заранее подписавшись на этой событие, слушайте его, анализируйте, что же именно было вброшено в служебные ячейки "A1" и "B1", ну и собственно интерпретируете и делайте выводы.

Т.е. таким образом можно организовать indirect подписку на нужные события форм.
Короче, целое дело :)
...
Рейтинг: 0 / 0
20.03.2016, 23:17
    #39196646
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
Лихо закручен сюжетик. :)

На самом деле, мне от формы нужно было только Close,
по которому я собирался читать данные и валить инстанс Access.Application.

Но, поскольку он (инстанс) сам замечательно валится в новой версии,
несмотря на живую ссылку на кнопку его-же CommandBar-а,
(чего не было с сылкой на форму без подписки),
вопрос разрешился как-бы сам собой.

Да и наличие специально обученной кнопочки, созданной прямо из Excel проекта,
более usability friendly, и абсолютно не вмешивается в логику самого Access проекта,
что мне очень симпатично, поскольку Access проект и сам по себе работать должен.

зы: Я не пробовал (за ненадобностью), но, возможно,
получилось бы подписаться на ивенты любимиго мной ToolBar-а в форме.
Но уже лень. :)

Спасибо.
...
Рейтинг: 0 / 0
21.03.2016, 14:10
    #39197148
Excel VBA не любит Access, ...
PredeclaredНа самом деле, мне от формы нужно было только Close
А что мешает открыть форму в режиме acDialog? Тогда и ловить событие Close не потребуется.
...
Рейтинг: 0 / 0
21.03.2016, 18:30
    #39197420
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA не любит Access, ...
Мое видение usability friendly концепции построения пользовательского интерфейса.
:)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Excel VBA не любит Access, ... / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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