2013-10-02 2 views
2

У меня есть база данных Access с огромным количеством форм (300+) и кода VBA. Бэкэнд этого db доступа находится в MS SQL.Открыть код активной формы VBA

Когда я нахожусь в элементе управления в форме (в форме вида), я хочу «перейти» непосредственно к коду VBA этой формы, не закрывая или не помещая форму в режим разработки. Я могу сделать это с помощью сочетания клавиш, которые я назначаю функции.

Это хорошо работает, когда элемент управления не находится в подчиненной форме. Но когда это так, в коде возникает ошибка, сообщающая мне, что модуль формы не найден.

Это код я использую:

Dim sFrmName As String 

sFrmName = Screen.ActiveControl.Parent.Name 
If Nz(sFrmName, "") = "" Then Exit Function 

'Open forms module 
DoCmd.OpenModule "Form_" & sFrmName 

Как я могу изменить этот код так, что я не должен поставить форму в режиме конструктора, чтобы перейти к коду VBA этой формы, которая также будет работать для подформ? Я знаю, что могу сделать это вручную в VBE, но я хотел бы сделать это в VBA.

+0

Всех форм в нашей базе данных Access имеют модули в форме, что я знаю точно. Функция выше работает отлично, когда activecontrol находится в mainform, но не тогда, когда она находится в подчиненной форме. Я получаю правильное имя (под) форму, но затем docmd.openmodule дает мне ошибку, что модуль не может быть найден. Когда я устанавливаю одну и ту же субформу как основную форму, просто для теста, тот же код выше работает без ошибок. У нас есть много подформ в использовании, и вышеприведенная функция может сэкономить нам много времени при разработке или устранении неполадок. – mkc

ответ

1

Найдено один из способов сделать это, это также работает для подформа:

Dim sFrmName As String 

sFrmName = Screen.ActiveControl.Parent.Name 
If Nz(sFrmName, "") = "" Then Exit Function 

'Open forms module 
'DoCmd.OpenModule "Form_" & sFrmName 
Application.VBE.ActiveVBProject.VBComponents("Form_" & sFrmName).CodeModule.CodePane.Show 
+0

умный трюк. благодаря –

Смежные вопросы