Sap ошибка доступа к приложению ms excel сообщения lp000
На проектах внедрения отчетности с использованием хранилища данных SAP BW многим архитекторам и консультантам приходится решать задачи подготовки больших форматированных отчетов: разнообразных ведомостей, выписок и т.п. Такие отчеты обычно характеризуются:
- Нестандартными относительно инструментов SAP требованиями к форматированию;
- Фиксированным числом столбцов;
- Значительным количеством столбцов и строк (соответственно, десятки и десятки тысяч и более);
- Требованием наличия Excel-представления;
- Требованием к времени выполнения не более нескольких минут
Консультантом создается рабочая книга BW-BEx, которая содержит один или несколько BW-BEx-отчетов. Отчеты выгружаются на отдельные листы этой книги, которые обычно скрывают от пользователей. Видимым оставляют лишь один лист книги, содержащий целевую форму отчета с необходимым форматированием.
Работа пользователя с таким отчетом выглядит следующим образом:
- в зависимости от используемого Excel-инструмента SAP BW, пользователь запускает BW-BEx Analyzer или SBOP Analysis for Office, подключается к серверу SAP BW, выбирает из роли рабочую книгу и запускает ее на выполнение.
Через несколько секунд (иногда – десятка секунд) появляется селекционный экран.
На экране пользователь выбирает значения параметров. Например, год-месяц, балансовую единицу, группу материала и т.п. Затем нажимает кнопку «выполнить». - Теперь настала очередь «поработать» для SAP BW: все BW-BEx-отчеты рабочей книги выполняются последовательно, отчет за отчетом, передавая на рабочие листы Excel свои данные.
- После получения в Excel данных каждого отчета запускается VBA-макрос. Логика работы макроса такова, что он ничего не делает, пока данные всех отчетов не будут получены на Excel-листы.
- Когда данные последнего отчета поступили на Excel-лист, VBA-макрос выполняет основную работу по подготовке форматирования отчета.
- Когда VBA-макрос завершил работу, пользователь может увидеть результат отчета в своем Excel.
Чего только не придумывают консультанты, чтобы, оставаясь в рамках стандартного подхода, качественно сделать-таки большой отчет. Но почти всегда ничего не получается. «Почти» означает компромиссы, послабления в требованиях. Бизнес-пользователи либо соглашаются применять более ограничивающие фильтры и отчет возвращает меньше данных, либо ждать выполнения подольше, либо вручную сводить несколько фрагментов отчета в один.
Чтобы все-таки не говорить клиенту «нет, мы не можем этого реализовать при таких требованиях», необходимо для начала сделать правильные выводы из очевидного: каждый инструмент предназначен для своей задачи.
Инструменты BW BEx Analyzer и SBOP Analysis for Office в общем случае не предназначены для реализации эффективных отчетов с большим количеством ячеек, с числом около 750000 и более (см SAP-ноту 1040454). Поэтому, используя модель данных SAP BW, надо выбрать другой инструмент, другой подход в реализации. Тогда решение не только обязательно получится, но и будет при этом эффективным.
Последние версии SAP Netweaver, SAP BW и HANA внесли большее разнообразие подходов публикации BW-данных в Excel, без использования BW BEx. Можно упомянуть такие:
- Подключение Excel через OData-сервисы напрямую к SAP Netweaver или даже к SAP HANA
- Подключение Excel к SAP HANA, как к базе данных, напрямую, через MDX
Я хочу рассказать о подходе, гораздо менее требовательном к новизне версий используемых продуктов, и в чем-то менее сложным. Речь идет о публикации данных отчетов в шаблон Excel-документа через OLE-интерфейс. Excel-шаблон при этом хранится в репозитории BDS на стороне SAP BW.
Преимущества подхода с OLE очевидны:
- Работает на любых современных версиях продуктов SAP и Microsoft Excel
- Никаких ограничений на объемы данных в отчете, кроме собственных в Excel
- Обеспечивает максимальную производительность передачи данных от сервера BW в Excel через OLE. Пример: выборка 525000 ячеек (70 колонок на 7500 строк) передается за 7 сек.
- Подготовка данных на «сервере BW» выполняется в ABAP-отчете, который, собрав выборку во внутреннюю таблицу, передает ее через OLE в Excel-шаблон, полученный из BDS.
- Централизованное (в одной BW-системе) ведение всех объектов, релевантных для отчета: шаблон Excel, модель данных BW, программа ABAP для заполнения шаблона.
- Соответствие обычным SAP-стандартам по разграничению доступа, разработке, транспорту настроек и пр.
Сложности в ABAP могут возникнуть при получении данных из модели BW. Возможные варианты: вызов BEx-отчета в ABAP, вызов FM RSDRI_INFOPROV_READ, SQL-SELECT по таблицам модели данных. Но это обычно есть в арсенале навыков опытного BW-консультанта. Глубокие знания программировании ABAP понадобятся, если возникнет потребность еще более ускорить работу кода по подготовке данных за счет тюнинга ABAP-программы или даже распараллеливания вычислений. Последнее, кстати, невозможно архитектурно в подходе с рабочими книгами BW BEx.
Вкратце, порядок создания отчета с использованием подхода с OLE следующий.
Часовой пояс: UTC + 3 часа
Правила форума
Вопросы по SAP Query и Quick View - сюда
доступ к SAP из VBA (Excel)
С обновлением SAP GUI с 6.4 Патч 23 до 7.01 Патч 15 перестал работать макрос загрузки данных из Excel в Z-таблицу SAP.
Переделываем макрос.
Обнаружили, что коннект к БД НЕ проходит для такого макроса
Dim R3 As Object
Set R3 = CreateObject("SAP.Functions")
' MsgBox R3.Connection.Logon
If R3.Connection.Logon(0, True) <> True Then
Exit Function
End If
Если раскомментарить MsgBox, то пройдет:
Dim R3 As Object
Set R3 = CreateObject("SAP.Functions")
MsgBox R3.Connection.Logon
If R3.Connection.Logon(0, True) <> True Then
Exit Function
End If
В чем может быть проблема?
Dim R3 As Object
Set R3 = CreateObject("SAP.Functions")
If R3.Connection.Logon <> True Then
Exit Function
End If
Команда R3.Connection.Logon(0, True) , с которой не работал коннект, взята с одной из тем форума. Есть какая-нибудь информация по ней?
а где Вы заполняете
R3.Connection.User = "user"
R3.Connection.Password = "1234"
R3.Connection.client = "000"
R3.Connection.ApplicationServer = "10.0.0.0"
R3.Connection.Language = "RU"
?
а где Вы заполняете
R3.Connection.User = "user"
R3.Connection.Password = "1234"
R3.Connection.client = "000"
R3.Connection.ApplicationServer = "10.0.0.0"
R3.Connection.Language = "RU"
?
Нигде. Насколько это важно? В окошке логона все поля (кроме пароля) почему-то сами по себе заполнены нужными значениями.
в object browser'е в VBA-редаакторе посмотрите проперти к этому объекту - там интуитивно понятный интерфейс
в object browser'е в VBA-редаакторе посмотрите проперти к этому объекту - там интуитивно понятный интерфейс
pberezin , можно чуть подробнее? Если это обычный Object browser, вызываемый в VBA-редакторе по клавише "F2", то в нем ничего про объект "SAP.Functions" нету. Тем более, про объект "R3".
его не видно, потому что вы применяете позднее (динамическое) связывание через createobject.
С саплогоном ставится ActiveX компонент SAP Remote function call control (файло wdtfuncs.ocx). Подключаете его в VBA через Tools\References, и вам станет доступен контрол SAPFunctions. Кидаете его на VBA-шную форму (очень удобно - в пропертях контрола Custom можно один раз настроить имена вызываемых из сапа RFC-ФМ, чтобы динамически через VBA их не присваивать). И в object browser'е будет всё видно.
Единственное, с отладкой RFC-вызовов чудеса какието - если ставишь AbapDebug=true, он почемуто в отладку вываливается не прямо в вызываемом ФМ, а в какомто rfc_get_function_interface (видимо диспетчер какойто, х.з.)
С саплогоном ставится ActiveX компонент SAP Remote function call control (файло wdtfuncs.ocx). Подключаете его в VBA через Tools\References, и вам станет доступен контрол SAPFunctions.
Кидаете его на VBA-шную форму (очень удобно - в пропертях контрола Custom можно один раз настроить имена вызываемых из сапа RFC-ФМ, чтобы динамически через VBA их не присваивать). И в object browser'е будет всё видно.
В object browser'е информация о составе SAPFunctions появилась, но до его подобъекта Connection. Что дальше - посмотреть не могу. Т.е. свойства SAPFunctions.Connection не вижу. Контекстное меню "Properties" светло-серое и невозможно для выбора. Как ни крутил. Кстати, контекстное меню "Properties" (щелк правой кнопкой мыши) и для SAPFunctions тоже недоступно для нажатия.
Не подскажете, как посмотреть там подробнее об объекте SAPFunctions.Connection.Logon? Нужны ли вообще и какие именно нужны параметры при его вызове?
У вас наверное настойки уровня безопасности макросов запрещают загрузку внешних activex. Потавьте в экселе самый низкий уровень безопасности.
Там даже на низком уровне, при открытии формы с таким контролом вываливается какоето предупреждение "application is about to init unsafe activex". Видимо, с т.з. экселя этот контрол не совсем канонический
А по поводу именно объекта Connection - да он почемуто не типизирован, надо объявлять as Object и присваивать проперти динамически. Там можно в режиме VBA-отладчика глянуть все его проперти.
Ну вот так например (здесь форма, с контролом SAPRfc и кнопкой btnGo)
Private Sub btnGo_Click()
Dim OR3connection As Object
Dim fm As Object
Dim expo As SAPFunctionsOCX.Exports
Dim impo As SAPFunctionsOCX.Imports
Dim par1 As SAPFunctionsOCX.Parameter
Dim par2 As SAPFunctionsOCX.Parameter 'Object
Dim v As Variant
Dim rc As Long
Dim brc As Boolean
With Me.SAPrfc
Set OR3connection = .Connection
OR3connection.User = Me.boxLogin.Text 'логин берём из поля формы
OR3connection.Password = Me.boxPass.Text 'пароль тоже
'r3dev
OR3connection.ApplicationServer = "10.46.не.дождётесь" 'IP сервера r/3
OR3connection.SystemNumber = "00" 'номер системы
OR3connection.client = "151"
OR3connection.Language = "RU"
brc = OR3connection.Logon(0, True)
If (brc = True) Then
Set fm = .Add("Z_RFCALL_FROM_MSSQL_TEST") 'вызываемый ФМ
Set expo = fm.Exports
'expo.RemoveAll
Set par1 = expo.Insert(1, 1) 'у ФМа один IMPORTING параметр типа INT4
fm.Call
rc = fm.ReturnCode 'результат sy-subrc
Me.boxRC.Text = rc 'вываливаем в поле формы
.AboutBox
End If
Call OR3connection.Logoff
End With
End Sub
'
' Пример вызова RFC модуля
'
' использует:
' SAP Remote Function Call Controll (wdtfuncs.ocx)
' SAP Logon Control (wdtlogU.ocx)
' SAP Table Factory (wdtaocx.ocx)
'
Sub rfc_call_sample()
Dim SAPFunctions As New SAPFunctionsOCX.SAPFunctions
Dim SAPFunction As SAPFunctionsOCX.Function
Dim SAPConnection As SAPLogonCtrl.Connection
Dim PersonalData As SAPTableFactoryCtrl.Table
Set SAPConnection = SAPFunctions.Connection
' Параметры соединения по умолчанию:
SAPConnection.Client = "200"
SAPConnection.User = "USERNAME"
' Подключаемся к SAP:
If SAPConnection.Logon(0, False) <> True Then
MsgBox "Ошибка входа в систему"
Exit Sub
End If
' Вызываем ФМ 'BAPI_EMPLOYEE_GETDATA'
Set SAPFunction = SAPFunctions.Add("BAPI_EMPLOYEE_GETDATA")
' Заполняем параметры
SAPFunction.Exports("LASTNAME_M") = "Пупкин"
' Собственно вызов:
If SAPFunction.Call <> True Then
MsgBox "Ошибка вызова ФМ"
Exit Sub
End If
' Обрабатываем результат:
Set PersonalData = SAPFunction.Tables("PERSONAL_DATA")
Dim i As Long
For i = 1 To PersonalData.RowCount
Debug.Print PersonalData(i, 1)
Next i
Thanx. Про остальные два контрола я и не знал.
Кстати, там ещё есть контрол SAP Bapi - тоже как вариант для rfc вызовов
Хочу поблагодарить за помощь. Подключив все три файла
wdtfuncs.ocx
wdtlogU.ocx
wdtaocx.ocx
и заглянув в браузер, разобрался, почему не выходил Каменный Цветок.
Оказывается, при вызове Logon, второй параметр (boolean) указывает на то, как будет происходит идентификация: видимо или невидимо. Видимо - False, а мы писали True, но при этом не заполняли никаких значений (типа системы, манданта и др.).
Но что означает первый параметр (названный в Object Browser именем hWnd ) не понял.
Что интересно. С самого начала на это внимание обратил, но "забил".
После обновления SAP GUI с 6.4 (патч 23) на 7.01 (патч 15) объект SAP Logon Control (в виде кнопки на форме) исчез с формы. Тогда мы не поверили своим глазам. Переслал файл на компы с GUI 6.4 и еще на один с GUI 7.01 - элемент виден только с GUI 6.4. Специально тогда вытащил кнопочку добавления объекта SAP Logon Control на панель. Пытаюсь добавить - пишет "Нет доверия . ". Это проблема 7.01 такая? Не сталкивались? Уровень безопасности (защита от макросов) - везде "Низкий". Обе галочки "доверять VBA-проектам" и еще какая-то рядом - взведены.
На компе с GUI 6.4, как и писал pberezin, действительно пишет "application is about to init unsafe activex", но элемент виден, не исчезает.
пробовал с разными ФМ (с параметрами и без) - ошибка при SAPFunction.Call.
куда копать, не подскажете??
Есть ли способ с помощью сценариев SAP или параметров среды в SAP запретить SAP открывать экспорт?
Спасибо
Джо
Решение либо на стороне SAP, чтобы не пытаться открыть, либо в вашем макросе, чтобы закрыть файл Excel после того, как он был открыт SAP. Не могли бы вы объяснить, что вы делаете на стороне SAP для экспорта, или какой код у вас есть в вашем макросе, в зависимости от вопроса, который вы хотите задать?
Это моя дилемма. Что касается Excel, вы не знаете, когда файл откроется. Иногда он ждет, пока процесс макроса завершится, иногда нет. В этом текущем макросе, который находится в стадии разработки, он ждет до конца, а затем Excel отправляет три из этих ошибок на экран для трех файлов, которые SAP экспортировал в xlsx. Элегантным решением было бы настроить приложение SAP GUI так, чтобы оно не пыталось открыть файл. Если вы знаете это и можете поделиться этим, вы золотой!
Если вы предпочитаете решение на стороне SAP, проблема заключается в том, что вы недостаточно описываете, что вы делаете для экспорта («выполняете запросы и загружаете результаты в файл Excel»). Итак, пожалуйста, еще раз объясните, что макрос делает на стороне SAP (запустить код транзакции? нажать кнопку? нажать клавишу? и т. д.)
Я нашел решение. В Excel 365 я открываю экземпляр электронной таблицы с макросом, а затем открываю второй экземпляр Excel с пустой электронной таблицей. Когда SAP сообщает Excel открыть экспортированную электронную таблицу, он сообщает новому экземпляру Excel, а не экземпляру, в котором запущен макрос. Не элегантное решение, но оно работает.
3 ответа
Для меня лучшим решением было: из SAP сохранить как Local (txt). TXT не открылся автоматически. Экземпляр открыт, но не представлен в списке VBE. Когда я попытался установить открытую книгу с помощью
Устанавливает нормально в режиме отладки, но автоматически нет, даже если приложение не удалось установить excel. Так что excel увидит новый экземпляр после того, как все остановилось.
/через скрипт SAP, в VBA/
Затем я просто сохраняю нужный рабочий лист, в моем случае это *.csv
Я нашел ответ на форуме SAP. Похоже, вы можете просто вызвать эту подпроцедуру, чтобы закрыть все остальные экземпляры Excel.
Удачи и счастливой автоматизации.
Скопируйте это после кода для экспорта файла из SAP. Сработало для меня, я надеюсь, что это поможет :)
Описание ошибки при направлении команды приложению:
Данная ошибка чаще всего возникает при открытии файлов Microsoft Office, таких как: *.xls, *.xlsx, *.doc, *.docx, *.mdb и так далее.
Решение данной ошибки довольно простое, и не требует от пользователя каких либо углубленных знаний.
Способ 1 — самый простой и быстрый.
Если данный способ не поможет переходите далее, но как правило именно он помогает в большинстве случаев.
Нажмите на кнопку и в выпавшем меню нажмите на кнопку .
В левой части окна выберите пункт «Дополнительно». Затем в правой части окна прокрутите содержимое до раздела «Общие», и снимите галочку «Игнорировать DDE-запросы от других приложений».
Решение проблемы. Способ 2.
Для начала вам необходимо найти файлы запуска программ вызвавших сбой.
Все они находятся в одной и той же папке.
Для Microsoft Office 2003 это — C:\Program Files\Microsoft Office\OFFICE11
Для Microsoft Office 2007 — C:\Program Files\Microsoft Office\OFFICE12
Для Microsoft Office 2010 — C:\Program Files\Microsoft Office\OFFICE14
Для Microsoft Office 2013 — C:\Program Files\Microsoft Office\OFFICE15
Откройте папку соответствующую вашей версии Microsoft Office и найдите файл приложения которое запустилось с данной ошибкой:
Если это Word, то нужный нам файл называется WINWORD.EXE, если Excel то EXCEL.EXE
В нашем случае установлен Microsoft Office 2007 и сбой дало приложение Excel. Следовательно исходя из вышесказанного, мы идем в каталог C:\Program Files\Microsoft Office\OFFICE12 и находим там файлEXCEL.EXE. Щелкаем на нем правой кнопкой мыши и выбираем пункт «Свойства».
Открытие свойств EXCEL.EXE
В открывшемся окне свойств, перейдите на вкладку «Совместимость». Обратите внимание на разделы «Режим совместимости» и «Уровень прав». В обоих разделах галочки должны быть сняты, как показано на рисунке ниже.
Свойства файла EXCEL.EXE
Если это не так, выставьте опираясь на рисунок.
Решение проблемы. Способ 3.
Внимание! Перед этим шагом, обязательно создайте точку восстановления системы. Если что-то пойдет не так, Вы всегда сможете «откатить» изменения.
Найдите при помощи меню утилиту «Восстановление системы». Затем, следуя подсказкам системы, создайте точку восстановления.
Запуск программы восстановления
Надеемся у вас не возникнет проблем с созданием точки восстановления.
Теперь вам осталось проделать пару действий в реестре Windows. Откройте программу RegEdit нажав одновременно две кнопки на клавиатуре — WIN+R и в открывшемся окошке введите:
regedit
и нажмите клавишу .
В левой части открывшегося окна последовательно открывая разделы, пройдите следующий путь:
HKEY_CURRENT_USER => Software => Microsoft => Windows => CurrentVersion
Теперь удалите все подразделы находящиеся в CurrentVersion по очереди.
Удаление разделов реестра
После этого перезагрузите компьютер. Ошибка при направлении команды приложению должна исчезнуть.
Using the connection SAP with MS Office, users spreads data from SAP application to right within Microsoft Office desktop applications, including Excel, Outlook, Word and Power point.
With the SAP-MS Office connectivity, end-users can interact with SAP transactions directly within their Excel spreadsheet, their Outlook e-mail screen, and their Word documents and on their Power point presentations.
Here we have a simple application to connect SAP with MS-office tool’s Excel.
But before that……Why? How? And Use!
Why Data from SAP to MS Office Applications
In spite of large moneys in SAP, most business users continue to be unsatisfied with it because data from SAP is not easily accessible in their favorite desktop productivity tools — Microsoft Excel, Microsoft Outlook and Microsoft Word. Since Microsoft Office Applications are not connected to SAP, users are forced to
- Use error-prone cut-copy-paste to populate their Excel spreadsheets.
- Switch screens from Outlook to gather data and take decisions as they respond to e-mails.
- Manually update data from Excel Spreadsheets to enterprise applications.
Benefits of Data from SAP to Microsoft Office Applications
SAP-MS Office Connectivity extends data from SAP to Microsoft Excel, Microsoft Outlook and Microsoft Word using a SOA based Information Delivery Server and Microsoft Office Add-ins, and provides the following benefits
- Eliminates cut-and-paste based data collecting mechanism from SAP to Microsoft Excel.
- Enables users to get real-time data from SAP within Excel with a single-click Refresh.
- Enables users to query and update SAP transactions from within Outlook screens.
- Allows the users to update SAP from within Excel, Outlook and Word.
- Avoids any data-integrity issues with copying and reduces compliance issues.
Who Benefits
- Production and Logistics Managers who want to create Excel reports from latest SAP data.
- Managers who want to track projects and status automatically as they receive status e-mails.
- Analysts who want to combine data from SAP and other enterprise data stores for budgeting purposes.
Example:
Here is the main part comes up. We shall take simple scenario for SAP with MS Excel connectivity. So let’s begin!!
Just before start, I would like to give little overview on what we are actually going to do. So, here are the scenarios!!
Excel File Scenarios
- Create a MS excel file for user input.
- Create user interface in excel sheet to input data for the customer master and output cells.
- Apply VB code to make connection with SAP.
- Read the input data for customer master from the excel file sheet.
- Fetch data from SAP using connection code from SAP.
- Display output within excel sheet itself.
SAP Scenarios
- Create a function module in ABAP that is “Remote Enabled”.
- Create IMPORT, EXPORT and TABLES parameters as per requirement from MS excel.
- Write logic to display customer master details based on input from Excel file.
- Activate the function module.
Well……………“A picture says thousand words”. So, let’s begin!
MS Excel – User Interface
First of all, lets create MS excel file with customer master input. We shall create simple selection screen for user input.
Well……filling cell values are simple here but how to add buttons (Get Address and Reset Output) here? This was also new in my case since new version of MS office.
Just follow following steps for this:
Click MS office button and select “Excel Options” button from the menu.
You will see here a new tab named “Developer”
Click on “Insert” and then select “Button” from the form control. Later on you can double click on the button and set its properties (Caption, Color, etc.)
Congratulations! Our input screen is finished here. Let’s design our output screen now.
I have created my output screen just after the input screen. You can create anywhere in the excel file. Here terms ‘anywhere’ descries to other worksheet also.
The output screen is simple as you see. Nothing much to do here. I just simple colored the cells for better look.
Great! Looks like we finished user interface here. (Did we miss something…’Naah’ for now!)
SAP – Select Data
Since we are taking simple example to fetch detail from customer master, let’s create a function module for it.
Create a function module.
Enter function group and Short text.
Make sure your function module is “Remote Enabled”.
Now let’s create “Tables” parameters:
Here we have two “Tables” parameters
We are all set with input and output structures.
Now, let’s fetch the data. Here is the only coding part came up in SAP. Look at below screen.
Here, we are selecting all the customer details from the KNA1 (customer master) table from the input table (ET_KUNNR) from excel file and return to the table (ET_CUST_LIST).
Now we have all the records in the table ET_CUST_LIST.
So, again congratulation friends! You have completed most of the things. The remaining step now is to display the list in the excel file.
Let’s now connect the SAP and MS Excel.
Go to the ‘Developer’ tab and click on “Visual Basic” icon.
The VB editor will be opened and we are going to write the code for connection of excel and SAP with sending and receiving data.
Here is the variable declaration list. These are the global variables. Let’s understand each of them.
Variable
Description
For creating object to access SAP functions.
To make BAPI function call via objBAPIControl.
Last row of output list
Total number of records returned from the SAP
Variable for increment records
Variable for next record (Index)
Object for SAP table (for customer master output)
Object for SAP table (for customer master input)
Variable
Description
Logon control is to make login in SAP.
Ro make connection to SAP R/3 using logon control.
If ‘True’ no popup will ask to enter SAP login details
Here are the properties for the “Get Address” button.
Let’s code when “Get Address” button is clicked.
Setup the local variables
Private Sub GetAddress_Click()
Now let’s setup the connection with SAP R/3 using following code.
Let’s do SAP Login here.
Perfect!! We have made the connection with SAP R/3. Now we are able to send and receive the data from MS Excel to SAP R/3 and vice versa.
But how to send my customer details and receive? Hmmm…..we need to use internal tables those are created in SAP function module. (Do you remember?….NO?… checkout Tables parameters in function ZNM_GET_CUSTOMER_DETAILS). So, let’s do this.
Here, ZNM_GET_CUSTOMER_DETAILS is our function module created in SAP.
ET_KUNNR: Customer details input details
ET_CUST_LIST: Customer output details.
We are reading here each cell from excel worksheet for input.
Here we have called the FM and passed the input details to process.
vcount_add returns total number of records from the SAP. And we have already set the loop to display records in the cells.
Here, R3Connection.Logoff is to sign off from your SAP account.
Here is the output screen:
Wow!! We have output result. Good job!! But what is the use of another button “Reset Output” here? Yes…good question.
The “Reset Output” button will clear all the data and messages from the screen. Look at below code:
Now we have completed the entire example here. N’ joy.
Here is the entire code:
Private LogonControl As SAPLogonCtrl.SAPLogonControl
Private R3Connection As SAPLogonCtrl.Connection
Private TableFactory As SAPTableFactory
Public Functions As SAPFunctionsOCX.SAPFunctions
Dim objBAPIControl, objgetaddress As Object
Dim vLastRow, vRows As Integer
Dim vcount_add, index_add As Integer
Dim rng As Range
Public objaddress, objkunnr As SAPTableFactoryCtrl.Table
MODULE:
Dim retcd As Boolean
Dim SilentLogon As Boolean
Set LogonControl = CreateObject(“SAP.LogonControl.1”)
Set objBAPIControl = CreateObject(“SAP.Functions”)
Set R3Connection = LogonControl.NewConnection
retcd = R3Connection.Logon(0, SilentLogon)
If retcd <> True Then MsgBox “Logon failed”: Exit Sub
Set objgetaddress = objBAPIControl.Add(“ZNM_GET_EMPLOYEE_DETAILS”)
Set objkunnr = objgetaddress.Tables(“ET_KUNNR”)
Set objaddress = objgetaddress.Tables(“ET_CUST_LIST”)
Dim sht As Worksheet
Set sht = ThisWorkbook.ActiveSheet
‘ Changes for the Loop
‘Dim int1 As Integer
‘Do While sht.Cells(int1, 2).Value <> ” “
‘ Changes for the Loop End
If sht.Cells(6, 2).Value <> ” ” Then
‘If ThisWorkbook.ActiveSheet.Cells(6, “B”).Value <> ” ” Then
‘objkunnr.Rows.Add objkunnr.Value(1, “SIGN”) = ThisWorkbook.ActiveSheet.Cells(6, 2).Value
objkunnr.Value(1, “SIGN”) = sht.Cells(6, 2).Value
‘objkunnr.Value(1, “OPTION”) = ThisWorkbook.ActiveSheet.Cells(6, 3).Value
objkunnr.Value(1, “OPTION”) = sht.Cells(6, 3).Value
‘objkunnr.Value(1, “LOW”) = ThisWorkbook.ActiveSheet.Cells(6, 4).Value
objkunnr.Value(1, “LOW”) = sht.Cells(6, 4).Value
‘objkunnr.Value(1, “HIGH”) = ThisWorkbook.ActiveSheet.Cells(6, 5).Value
objkunnr.Value(1, “HIGH”) = sht.Cells(6, 5).Value
If returnfunc = True Then
For index_add = 1 To vcount_add
vRows = 11 + index_add
sht.Cells(vRows, 2) = objaddress.Value(index_add, “KUNNR”)
sht.Cells(vRows, 3) = objaddress.Value(index_add, “LAND1”)
sht.Cells(vRows, 4) = objaddress.Value(index_add, “NAME1”)
sht.Cells(vRows, 5) = objaddress.Value(index_add, “ORT01”)
sht.Cells(vRows, 6) = objaddress.Value(index_add, “PSTLZ”)
sht.Cells(vRows, 7) = objaddress.Value(index_add, “REGIO”)
sht.Cells(vRows, 8) = objaddress.Value(index_add, “KTOKD”)
sht.Cells(vRows, 9) = objaddress.Value(index_add, “TELF1”)
sht.Cells(vRows, 10) = objaddress.Value(index_add, “TELFX”)
‘ If address not exist then Show error
If vcount_add = “” Then
sht.Cells(10, 11) = “Invalid Input”
‘ ActiveSheet.Cells(10, 12) = “BAPI Call is Successfull”
‘ ActiveSheet.Cells(11, 12) = vcount_add & “rows are entered”
sht.Cells(10, 12) = “BAPI Call is Successfull”
sht.Cells(11, 12) = vcount_add & ” rows are entered”
COMMON ERROR: User defined Type not defined
So…let’s try to remove the one. As our friends have posted solutions, here are the steps to avoid the error.
1. Go to your VBA Project and Select Tool –> References.
2. “References” window will be opened as below.
3. Select “ B rowse… ” and select .OCX files for Active X control from below path. (SAP GUI 7.3 already installed on my machine)
4. Select wdtaocxU.ocx, wdtfuncU.ocx, wdtlogU.ocx files from the
Читайте также: