Sap ошибка доступа к приложению ms excel
Есть ли способ с помощью сценариев 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 по очереди.
Удаление разделов реестра
После этого перезагрузите компьютер. Ошибка при направлении команды приложению должна исчезнуть.
Часовой пояс: 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.
куда копать, не подскажете??
Причины возникновения ошибки
Какие же основные причины вызывают данную ошибку? Можно выделить следующие:
- Повреждение надстройки;
- Попытка получить доступ к данным активного приложения;
- Ошибки в системном реестре;
- Повреждение программы Excel.
Решение проблемы
Пути устранения данной ошибки зависят от её причины. Но, так как в большинстве случаев, установить причину труднее, чем её ликвидировать, то более рациональным решением является методом проб попытаться найти верный способ действий из тех вариантов, которые представлены ниже.
Способ 1: отключение игнорирования DDE
Чаще всего, устранить ошибку при направлении команды удается путем отключения игнорирования DDE.
После этого, в значительном числе случаев, проблема устраняется.
Способ 2: отключение режима совместимости
Ещё одной вероятной причиной, описанной выше проблемы, может быть включенный режим совместимости. Для того, чтобы отключить его, нужно последовательно проделать указанные ниже шаги.
-
Переходим, с помощью проводника Windows, или любого файлового менеджера, в каталог размещения пакета программ Microsoft Office на компьютере. Путь к нему выглядит следующим образом: C:\Program Files\Microsoft Office\OFFICE№ . № — это номер офисного пакета. Например, папка, где хранятся программы Microsoft Office 2007, будет называться OFFICE12, Microsoft Office 2010 — OFFICE14, Microsoft Office 2013 — OFFICE15, и т.д.
Если галочки в соответствующих пунктах не установлены, то продолжаем искать источник проблемы в другом месте.
Способ 3: Очистка реестра
Одной из причин, которая может вызвать ошибку при направлении команды приложению в Excel, являются неполадки в реестре. Поэтому, нам его необходимо будет почистить. Перед тем, как приступать к дальнейшим действиям, для того чтобы подстраховать себя от возможных нежелательных последствий данной процедуры, настойчиво рекомендуем создать точку восстановления системы.
-
Для того, чтобы вызвать окно «Выполнить», на клавиатуре вводим комбинацию клавиш Win+R. В открывшееся окно, вводим команду «RegEdit» без кавычек. Жмем на кнопку «OK».
Способ 4: отключение аппаратного ускорения
Временным решением проблемы может стать отключение аппаратного ускорения в Excel.
- Переходим в уже знакомый нам по первому способу решения проблемы раздел «Параметры» во вкладке «Файл». Опять кликаем по пункту «Дополнительно».
- В открывшемся окне дополнительных параметров Excel, ищем блок настроек «Экран». Устанавливаем галочку около параметра «Отключить аппаратное ускорение обработки изображений». Кликаем по кнопке «OK».
Способ 5: отключение надстроек
Как уже говорилось выше, одной из причин данной проблемы может быть неисправность какой-то надстройки. Поэтому, как временную меру, можно использовать отключение надстроек Excel.
-
Опять переходим, находясь во вкладке «Файл», в раздел «Параметры», но на этот раз кликаем по пункту «Надстройки».
Если же после выключения всех надстроек проблема осталась, то это означает, что надстройки можно включить, а ошибку следует устранить другим способом.
Способ 6: сброс сопоставлений файлов
Для решения проблемы можно также попытаться сбросить сопоставления файлов.
-
Через кнопку «Пуск» переходим в «Панель управления».
Способ 7: загрузка обновлений Windows и переустановка пакета Microsoft Office
Не в последнюю очередь виной появления данной ошибки в Excel может быть отсутствие важных обновлений Windows. Нужно проверить, все ли доступные обновления загружены, и в случае необходимости закачать недостающие.
-
Опять открываем Панель управления. Переходим в раздел «Система и безопасность».
Если ни один из перечисленных методов не помог решить проблему, то возможно есть смысл задуматься о переустановке пакета программ Microsoft Office, а то и о переустановке операционной системы Windows в целом.
Как видим, довольно много возможных вариантов по устранению ошибки при направлении команды в программе Excel. Но, как правило, в каждом конкретном случае существует только одно верное решение. Поэтому, для того, чтобы ликвидировать эту проблему, придется методом проб использовать различные способы устранения ошибки, пока не будет найден единственно верный вариант.
Мы рады, что смогли помочь Вам в решении проблемы.
Отблагодарите автора, поделитесь статьей в социальных сетях.
Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.
Универсальный способ для Word и Excel
Первый метод подходит для Word и Excel любых версий (от 2003 до 2016). В данном случае Вам необходимо найти файлы нужной программы. Для этого заходите в:
- Локальный диск С.
- Program Files (или Program Files x86, если у Вас 64-битная Windows).
- Microsoft Ofiice.
А далее открываете папку:
- Office11 – если у вас пакет 2003 года выпуска;
- Office12 – 2007 года;
- Office14 – 2010 года;
- Office15 – 2013 года.
Затем находите файл EXCEL.exe или WINWORD.exe (смотря, при запуске какой программы выскакивает эта ошибка), нажимаете на нем ПКМ и выбираете «Свойства».
В новом окне переходите на вкладку «Совместимость» и проверяете, чтобы в двух пунктах, отмеченных на скриншоте ниже, НЕ стояли галочки. Если они есть – тогда уберите их и нажмите кнопку «Применить».
Следующий метод подходит только для Excel (всех версий)
В данном случае тоже нужно убрать галочку в одном пункте.
Пример для Excel 2007 (также актуально для Excel 2010 и 2013):
Пример для Excel 2003:
Еще один способ – поставить галочку в этом пункте, сохранить настройке, после чего снова открыть это окно и убрать её. Может помочь.
Во всем виноват Tune Up
- Открываете Tune Up Utilities.
- Переходите на вкладку Optimize.
- Нажимаете кнопку «Disable Programs».
- Ищете в новом окне строчку Microsoft Office. Если напротив нее написано «Enabled» (включено), тогда переключите на «Disabled» (выключено).
Если у Вас русская версия Tune Up Utilities, тогда ориентируйтесь по скриншотам. Ничего сложного там нет, поэтому Вы легко с этим справитесь.
Радикальные методы
Если ничего не помогло, тогда будем действовать радикально. Но это уже на Ваш страх и риск.
Первый вариант – удаление папок в реестре.
Неправильные действия в реестре могут привести к плачевному результату. Поэтому, перед тем как решитесь попробовать этот метод, рекомендуется создать контрольную точку восстановления. Если что-то пойдет не так, Вы сможете откатиться к ней, восстановив прежние настройки ПК или ноутбука.
Итак, чтобы удалить папки в реестре, выполняете следующее:
- Нажимаете кнопку «Пуск», вводите в поле поиска слово regedit, после чего запускаете найденную в списке программу.
- В новом окне открываете поочередно папки – HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion.
- Удаляете все папки, которые находятся в «CurrentVersion» (если есть).
- Перезагружаете ПК или ноутбук.
После этого проблема должна исчезнуть.
Но перед этим обязательно создайте точку восстановления, чтобы в случае чего вернуть все назад (ссылка на статью о том, как это сделать, находится чуть выше).
Читайте также: