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/