powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получить список встроенных макросов
12 сообщений из 12, страница 1 из 1
Получить список встроенных макросов
    #39876361
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично я не люблю макросы. Особенно встроенные. Причины можете указать сами.

Но так уж получается, что на доработку или сопровождение достаются базы, где часть задач запрограммировано встроенными макросами, а часть кодом. И начинается геммор... То ли быстро просмотрел модуль формы/отчёта на наличие обработчиков, то ли исследуешь каждый элемент отдельно.

Но вот у Даниэля Пино я нашёл процедуру (смотреть здесь ), которая составляет список всех встроенных макросов в базе. Очень удобная штука. Думаю пригодится. Проверено.
Код: 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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
'---------------------------------------------------------------------------------------
' Procedure : FindEmbeddedMacros
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : http://www.cardaconsultants.com
' Purpose   : Search Forms & Reports to locate any Embedded Macros
'             The search results are printed to the immediate window
' Copyright : The following is release as Attribution-ShareAlike 4.0 International
'             (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
' Req'd Refs: Uses Late Binding, so none required
'
' Input Variables:
' ~~~~~~~~~~~~~~~~
' None
'
' Usage:
' ~~~~~~
' ?FindEmbeddedMacros
' Call FindEmbeddedMacros
'
' Revision History:
' Rev       Date(yyyy/mm/dd)        Description
' **************************************************************************************
' 1         2017-01-07              Initial Release
' 2         2018-05-24              Copyright updated
'---------------------------------------------------------------------------------------
Public Sub FindEmbeddedMacros()
    On Error GoTo Error_Handler
    Dim oFrm                  As Object
    Dim frm                   As Access.Form
    Dim oRpt                  As Object
    Dim rpt                   As Access.Report
    Dim ctl                   As Access.Control
    Dim prp                   As DAO.Property
 
    Access.Application.Echo False
    Debug.Print "Search Results"
    Debug.Print "Object Type", "Object Name", "Control Name", "Event Name"
    Debug.Print String(80, "-")
 
    'Search the forms
    For Each oFrm In Application.CurrentProject.AllForms
        DoCmd.OpenForm oFrm.Name, acDesign
        Set frm = Forms(oFrm.Name).Form
        With frm
            For Each prp In .Properties
                'Form Properties
                If InStr(prp.Name, "EMMacro") > 0 Then
                    If Len(prp.value) > 0 Then
                        Debug.Print "Form", frm.Name, , Replace(prp.Name, "EmMacro", "")
                    End If
                End If
            Next prp
            'Form Control Properties
            For Each ctl In frm.Controls
                For Each prp In ctl.Properties
                    If InStr(prp.Name, "EMMacro") > 0 Then
                        If Len(prp.value) > 0 Then
                            Debug.Print "Form", frm.Name, ctl.Name, Replace(prp.Name, "EmMacro", "")
                        End If
                    End If
                Next prp
            Next ctl
        End With
        DoCmd.Close acForm, oFrm.Name, acSaveNo
    Next oFrm
 
    'Search the Reports
    For Each oRpt In Application.CurrentProject.AllReports
        DoCmd.OpenReport oRpt.Name, acDesign
        Set rpt = Reports(oRpt.Name).Report
        With rpt
            'Report Properties
            For Each prp In .Properties
                If InStr(prp.Name, "EmMacro") > 0 Then
                    If Len(prp.value) > 0 Then
                        Debug.Print "Report", rpt.Name, , Replace(prp.Name, "EmMacro", "")
                    End If
                End If
            Next prp
            'Report Control Properties
            For Each ctl In rpt.Controls
                For Each prp In ctl.Properties
                    If InStr(prp.Name, "EMMacro") > 0 Then
                        If Len(prp.value) > 0 Then
                            Debug.Print "Report", rpt.Name, ctl.Name, Replace(prp.Name, "EmMacro", "")
                        End If
                    End If
                Next prp
            Next ctl
        End With
        DoCmd.Close acReport, oRpt.Name, acSaveNo
    Next oRpt
 
    Debug.Print String(80, "-")
    Debug.Print "Search Completed"
 
Error_Handler_Exit:
    On Error Resume Next
    Access.Application.Echo True
    If Not prp Is Nothing Then Set prp = Nothing
    If Not ctl Is Nothing Then Set ctl = Nothing
    If Not rpt Is Nothing Then Set rpt = Nothing
    If Not oRpt Is Nothing Then Set oRpt = Nothing
    If Not frm Is Nothing Then Set frm = Nothing
    If Not oFrm Is Nothing Then Set oFrm = Nothing
    Exit Sub
 
Error_Handler:
    MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Source: FindEmbeddedMacros" & vbCrLf & _
           "Error Description: " & Err.Description & _
           Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
           , vbOKOnly + vbCritical, "An Error has Occurred!"
    Resume Error_Handler_Exit
End Sub


Вот бы ещё и автоматом конвертировала макросы в процедуры VBA. Может у кого есть?
-------------------------------------------------------------
А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?
...
Рейтинг: 0 / 0
Получить список встроенных макросов
    #39876638
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss,
если немного подправить код, то получим читабельный текст макроса
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
   'Form Control Properties
   Dim jt, st, npech
   For Each ctl In frm.Controls
   npech = 0
 For Each prp In ctl.Properties
 jt = prp.Type
 
 If jt > 20 And prp.Name Like "*emmacro*" Then
 st = ""
 st = "" & (prp.Value)
 If Len(st) > 0 Then
 npech = npech + 1
 If npech = 1 Then
  Debug.Print "===форма="; oFrm.Name, "=контрол="; ctl.Name
End If
 Debug.Print prp.Type; " "; prp.Name, "===свойство===";
 Debug.Print st
 
   End If
 End If
 Next prp


===форма=Форма ввода =контрол=Закрыть
8209 OnClickEmMacro ===свойство===Version =196611
ColumnsShown =0
Begin
Action ="Close"
Argument ="-1"
Argument =""
Argument ="0"
End
Begin
Comment ="_AXL: <?xml version=\"1.0\" encoding=\"UTF-16\" standalone=\"no\"?>\015\012 <UserInterfaceMacro For=\"Закрыть\" Event=\"OnClick\" xmlns=\" http://schemas.microsoft.com/office/accessservices/2009/11/application\"> <Statements> <Action Name=\"CloseWindow\"/> </Statements> </UserInt"
End
Begin
Comment ="_AXL:erfaceMacro>"
End
...
Рейтинг: 0 / 0
Получить список встроенных макросов
    #39876645
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно ли как-то программно преобразовывать макрос в VBA? Было бы здорово.
...
Рейтинг: 0 / 0
Получить список встроенных макросов
    #39876668
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JossА можно ли как-то программно преобразовывать макрос в VBA? Было бы здорово.

Выделяешь макрос, Файл -> Сохранить как -> в "как" выбираешь Модуль и будет счастье...
...
Рейтинг: 0 / 0
Получить список встроенных макросов
    #39876709
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JossА можно ли как-то программно преобразовывать макрос в VBA?

пока у меня получилось только так
- открыть внедренный макрос в конструкторе
- выделить, скопировать
- создать новый пустой обычный макрос
- вставить скопированное
- обычный макрос преобразуется в код VBA, но работать код не будет --придется вручную править


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Function Макрос1()
On Error GoTo Макрос1_Err

    With CodeContextObject
        If (.Form.Dirty) Then
            DoCmd.RunCommand acCmdSaveRecord
        End If
        TempVars.Add "ПермПодр", .[№ заказа]
        DoCmd.OpenForm "Добавить товар", acNormal, "", "[№ заказа]=[TempVars]![ПермПодр]", , acDialog
    End With


Макрос1_Exit:
    Exit Function

Макрос1_Err:
    MsgBox Error$
    Resume Макрос1_Exit

End Function
...
Рейтинг: 0 / 0
Получить список встроенных макросов
    #39884758
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JossА можно ли как-то программно преобразовывать макрос в VBA? Было бы здорово.

DoCmd.RunCommand acCmdConvertMacrosToVisualBasic
не подойдет?
...
Рейтинг: 0 / 0
Получить список встроенных макросов
    #39884802
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serge GavrilovJossА можно ли как-то программно преобразовывать макрос в VBA? Было бы здорово.

DoCmd.RunCommand acCmdConvertMacrosToVisualBasic
не подойдет? Надо будет попробовать.
...
Рейтинг: 0 / 0
Получить список встроенных макросов
    #39884875
Фотография Лапух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss...А можно ли как-то программно преобразовывать макрос в VBA? Было бы здорово....
А у нас - У древних старообрядцев и поклонников форматов mdb , есть такая фишка как - Преобразовать макрос в процедуру .
Именно с этого когда то и начал изучение процедур, ибо страшно признаться - баловался изначально макросами.
...
Рейтинг: 0 / 0
Получить список встроенных макросов
    #39884904
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, про эту фишку я знаю. Но она кажется для обычных макросов, а не для встроенных. Так?
...
Рейтинг: 0 / 0
Получить список встроенных макросов
    #39884911
Фотография Лапух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss...а не для встроенных. Так?...
Наверное так.
Не пробовал и не изгалялся на встроенных.
Сами же наверное знаете, а то и прочуяли, что чем новее версия, тем она ущемлённее и как бы - Хуже.
...
Рейтинг: 0 / 0
Получить список встроенных макросов
    #39884952
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JossНу, про эту фишку я знаю. Но она кажется для обычных макросов, а не для встроенных. Так?
Можно попробовать сохранить Embedded Macro в файл, а затем, используя LoadFromText загрузить в базу как обычный макрос, программно выделить его в окне базы данных и преобразовать, используя DoCmd.RunCommand acCmdConvertMacrosToVisualBasic
...
Рейтинг: 0 / 0
Получить список встроенных макросов
    #39884961
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно так и буду делать. Просто сейчас никак руки не доходят.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получить список встроенных макросов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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