SAPфорум.RU https://sapboard.ru/forum/ |
|
Миграция макросов с 3.5 на 7.х https://sapboard.ru/forum/viewtopic.php?f=12&t=90860 |
Страница 1 из 1 |
Автор: | sirin [ Пт, июл 03 2015, 10:08 ] |
Заголовок сообщения: | Миграция макросов с 3.5 на 7.х |
Решились мы таки перенести старые книжки в новую версию BEx. Нашли несколько книжек с древними мега-макросами написанными неизвестными художниками много лет назад. Часто встречается конструкция типа: Run "SAPBEX.XLA!SAPBEXcopyFILTERVALUE", filter_val_year, filter_tgt_year Как я понимаю, в 7-ке я так просто не смогу это просто так скопировать, мне нужно найти соотв.ф-цию из новых функций. И вопрос в том, как найти соответствия старых и новых макросов? Есть где-то такая табличка, хаутушка или что-то подобное? Далее, раньше можно было использовать конструкцию типа: Set filter_val_year = Range("SAPBEXqueries!" & "SAPBEXq0025" & "f0FISCYEAR") т.е. обращаться к области таблицы с данными переменных, фильтров и т.д. А теперь коллекция application.names пустая, адресов никаких нет. Соответственно вопрос, можно ли как-то найти области в которых лежат элементы рабочей книги? Желательно найти в книге же, потому как залезть в САП из экселя без повторной логиновки у меня так и не получилось. Ну вообще было бы здорово найти где-то описания всех элементов рабочей книги, чтобы например узнать какой грид связан с каким дата провайдером и прочее. Может кто знает? |
Автор: | Air_demon [ Пт, июл 03 2015, 10:53 ] |
Заголовок сообщения: | Re: Миграция макросов с 3.5 на 7.х |
sirin написал(а): узнать какой грид связан с каким дата провайдером Это в принципе легко. Ниже процедура, которая выводит на новом листе список Grid-ов с привязанными к ним датапровайдерами и линками на область результатов и отдельно список датапровайдеров. Для ее использования должна быть подключена библиотека BEx Analyzer API. Code: Option Explicit
Sub Grid_DP_List() Dim myBExItem As Object Dim myDP As Object Dim locCount As Integer Dim Link As String Worksheets.Add locCount = 1 ActiveSheet.Cells(locCount, 1) = "Grid Name" ActiveSheet.Cells(locCount, 2) = "Grid DP" ActiveSheet.Cells(locCount, 3) = "DP Query" ActiveSheet.Cells(locCount, 4) = "Grid Worksheet" ActiveSheet.Cells(locCount, 5) = "Grid Range" For Each myBExItem In BEx.Items If myBExItem.ToString Like "*BExItemGrid*" Then locCount = locCount + 1 ActiveSheet.Cells(locCount, 1) = myBExItem.Name ActiveSheet.Cells(locCount, 2) = myBExItem.DataProvider.Name ActiveSheet.Cells(locCount, 3) = myBExItem.DataProvider.Query ActiveSheet.Cells(locCount, 4) = myBExItem.WorksheetName ActiveSheet.Cells(locCount, 5) = myBExItem.Range.Address Link = "'" & myBExItem.WorksheetName & "'!" & myBExItem.Range.Address ActiveSheet.Hyperlinks.Add Anchor:=ActiveSheet.Cells(locCount, 5), Address:="", SubAddress:= _ Link, TextToDisplay:=ActiveSheet.Cells(locCount, 5).Text End If Next locCount = 1 ActiveSheet.Cells(locCount, 8) = "DP Name" ActiveSheet.Cells(locCount, 9) = "DP Query" For Each myDP In BEx.DataProviders locCount = locCount + 1 ActiveSheet.Cells(locCount, 8) = myDP.Name ActiveSheet.Cells(locCount, 9) = myDP.Query Next ActiveSheet.Range("A:I").Columns.AutoFit End Sub |
Автор: | 12ozmdm [ Пт, июл 03 2015, 12:12 ] |
Заголовок сообщения: | Re: Миграция макросов с 3.5 на 7.х |
sirin написал(а): Часто встречается конструкция типа: Run "SAPBEX.XLA!SAPBEXcopyFILTERVALUE", filter_val_year, filter_tgt_year Как я понимаю, в 7-ке я так просто не смогу это просто так скопировать, мне нужно найти соотв.ф-цию из новых функций. И вопрос в том, как найти соответствия старых и новых макросов? Есть где-то такая табличка, хаутушка или что-то подобное? Есть вот такое: http://scn.sap.com/people/prakash.darji/blog/2006/10/10/migrating-advanced-bex-analyzer-workbooks--what-vba-is-supported но для SAPBEXcopyFILTERVALUE указано что нет ничего соответствующего... |
Автор: | sirin [ Вт, июл 07 2015, 18:04 ] |
Заголовок сообщения: | Re: Миграция макросов с 3.5 на 7.х |
Всем большущее спасибо! Air_demon, а как создается объект BEx? Он у меня пустой. Надо его как-то определить? |
Автор: | murmur [ Ср, июл 08 2015, 00:11 ] |
Заголовок сообщения: | Re: Миграция макросов с 3.5 на 7.х |
Так он же написал "Для ее использования должна быть подключена библиотека BEx Analyzer API". То есть через Reference и New (если есть tlb) или же с помощью CreateObject, указав ProgID |
Автор: | Air_demon [ Ср, июл 08 2015, 09:22 ] |
Заголовок сообщения: | Re: Миграция макросов с 3.5 на 7.х |
sirin написал(а): Всем большущее спасибо! Air_demon, а как создается объект BEx? Он у меня пустой. Надо его как-то определить? Public Function BEx() As BExApplication Set BEx = Application.Run("BExAnalyzer.xla!GetBEx", ThisWorkbook) End Function |
Автор: | sirin [ Ср, июл 08 2015, 14:47 ] |
Заголовок сообщения: | Re: Миграция макросов с 3.5 на 7.х |
Объект все равно равен nothing. При трассировке вижу, что дергает такую вот конструкцию, которая у меня тоже nothing: Set GetBEx = pAddin.ExcelInterface.WorkbookBExExcelApplication(lName) Может, надо еще где-то в шаманский бубен стукнуть? |
Автор: | Air_demon [ Ср, июл 08 2015, 17:23 ] |
Заголовок сообщения: | Re: Миграция макросов с 3.5 на 7.х |
sirin написал(а): Может, надо еще где-то в шаманский бубен стукнуть? Надо сохранить книгу. В принципе можно обойтись только добавлением функции Public Function BEx() As BExApplication, без включения библиотеки в References. |
Автор: | tekulum [ Чт, июл 23 2015, 15:03 ] |
Заголовок сообщения: | Re: Миграция макросов с 3.5 на 7.х |
sirin написал(а): Всем большущее спасибо! Air_demon, а как создается объект BEx? Он у меня пустой. Надо его как-то определить? Для просмотра содержимого необходимо его создать "стандартным" путем - через кнопку "добавить макросы" в настройках рабочей книги. В таком случае создается модуль "BExInterfaceModule" с подключением объекта "BEx" и его содержимое становится доступным к просмотру. Только, к сожалению, далеко не всё... |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |