How to Use AccessibleObjectFromWindow API in VBA to Get Excel Application Object from Excel Instance Window Handle

I need to get the Excel.application object from a window handle using AccessibleObjectFromWindow. I can't seem to make the code work. First, I successfully search for the XLMAIN windows. Then, when I get a handle, I execute the AccessibleObjectFromWindow
function. It seems to return a value of -2147467262 in all cases. Therefore, I believe that it is returning an error value. I can't figure out how to determine the meaning of this value.
If it is an error value, I believe that one or more arguments are in error. My best guess at present is that the GUID argument is incorrect. I have tried two GUID values: {00020400-0000-0000-C000-000000000046} and {90140000-0016-0409-0000-0000000FF1CE}.
I have seen both used in conjunction with OBJID_NATIVEOM. Neither one seems to work. I really would prefer not to use the second one as it has an Excel major and minor version number. I would hate to have to change this code, if a new minor version appeared.
The attached code has been commented to show which parts have been shown to work and which not. I'm at my wits end and really need help.
Thanks
'This module is located in Access 2010, but this is an Excel question.
Option Compare Database
Option Explicit
' Module-Level Declarations
'The GetDesktopWindow function and FindWindowEx function work just fine.
Public Declare Function GetDesktopWindow Lib "user32" () As Long
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) _
As Long
'I'm not getting the expected output from this function (see below)
Private Declare Function AccessibleObjectFromWindow& Lib "oleacc.dll" _
(ByVal hwnd&, _
ByVal dwId&, _
riid As GUID, _
xlwb As Object)
Type GUID
lData1 As Long
iData2 As Integer
iData3 As Integer
aBData4(0 To 7) As Byte
End Type
Function ExcelInstances() As Long
' Procedure-Level Declarations
' Value of OBJID_NATIVEOM verified by checking list of Windows API constants _
on this site: http://www.lw-tech.com/q1/base.htm
Const OBJID_NATIVEOM = &HFFFFFFF0
Dim hWndDesk As Long 'Desktop window
Dim hWndXL As Long 'Child window
Dim objExcelApp As Object 'Final result wanted: Excel application object
'Following variable (xlapp) to be set by AccessibleObjectFromWindow function
Dim xlapp As Object
Dim IDispatch As GUID 'GUID used in call to AccessibleObjectFrom Window function
'Set up GUID to be used for all instances of Excel that are found
Dim tmp1 As Variant 'Return value from AccessibleObjectFromWindow
' Executable Statements
SetIDispatch IDispatch
IDispatch = IDispatch
'Get a handle to the desktop
hWndDesk = GetDesktopWindow 'This seems to work
Do
'Get the next Excel window
'The following statement seems to work. We are finding and counting _
correctly all the instances of Excel. hWndXL is non-zero for each _
instance of Excel
hWndXL = FindWindowEx(GetDesktopWindow, hWndXL, "XLMAIN", vbNullString)
'If we got one, increment the count
If hWndXL > 0 Then
'This works. We correctly count all _
instances of Excel
ExcelInstances = ExcelInstances + 1
'Here is the problem. The following statement executes and returns a value of _
-2147467262. xlapp, which is passed by reference to AccessibleObjectFromWindow, _
is set to nothing. It should be set to the object for Excel.application. _
I believe that this value is not an object. I tried to reference tmp1. in the _
immediate window. There was no Intellisense.
'I think that the function in returning an error value, but I can't figure _
out what it is. I believe that AccessibleObjectFromWindow returns error _
values, but I don't know where to find their values so I can interpret the _
function's results.
'As best I can tell, the hWndXL parameter is correct. It is the handle for _
an instance of Excel. OBJID_NATIVEOM is set correctly (see constant declaration _
above). xlapp is passed by reference as a non-initialized object variable, which _
will be set by AccessiblObjectFromWindow. IDispatch may be the problem. It is set _
as shown below in the procedure SetIDispatch(ByRef ID As GUID). This procedure _
appears to work. I can see that IDispatch is set as I intended and correctly _
passed to AccessibleObjectFromWindow.
tmp1 = AccessibleObjectFromWindow(hWndXL, OBJID_NATIVEOM, IDispatch, xlapp)
'Need to write code to test tmp1 for error. If none, then set objExcelApp = _
object. Also, I exect xlapp to be set to Excel.application
End If
'Loop until we've found them all
Loop Until hWndXL = 0
End Function
Private Sub SetIDispatch(ByRef ID As GUID)
'Defines the IDispatch variable. The interface _
ID is {90140000-0016-0409-0000-0000000FF1CE}.
'NOT USING {00020400-0000-0000-C000-000000000046}, _
which could be the problem
'9 is release version - first version shipped (initial release)
'0 is release type - retail/oem
'14 is major version
'0000 is minor version
'0016 is product ID - MS Excel 2010
'0409 is language identifier - English
'0 is x86 or x64 - this is x86
'000 reserved
'0 is debug/ship
'000000FF1CE is office family ID
With ID
.lData1 = &H90140000
.iData2 = &H16
.iData3 = &H409
.aBData4(0) = &H0
.aBData4(1) = &H0
.aBData4(2) = &H0
.aBData4(3) = &H0
.aBData4(4) = &H0
.aBData4(5) = &HF
.aBData4(6) = &HF1
.aBData4(7) = &HCE
End With
End Sub
DaveInCalabasas

I don't think you can return a reference to Excel's main window like that as you are attempting to do.
Ref:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd317978(v=vs.85).aspx 
It's relatively straightforward to return any workbook's window in any given instance, and in turn it's parent Excel app. Try the following and adapt as required (and include error handling) -
Option Explicit
Private Declare Function FindWindowEx Lib "User32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
Private Declare Function IIDFromString Lib "ole32" _
(ByVal lpsz As Long, ByRef lpiid As GUID) As Long
Private Declare Function AccessibleObjectFromWindow Lib "oleacc" _
(ByVal hWnd As Long, ByVal dwId As Long, ByRef riid As GUID, _
ByRef ppvObject As Object) As Long
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
Private Const S_OK As Long = &H0
Private Const IID_IDispatch As String = "{00020400-0000-0000-C000-000000000046}"
Private Const OBJID_NATIVEOM As Long = &HFFFFFFF0
Sub test()
Dim i As Long
Dim hWinXL As Long
Dim xlApp As Object ' Excel.Application
Dim wb As Object ' Excel.Workbook
hWinXL = FindWindowEx(0&, 0&, "XLMAIN", vbNullString)
While hWinXL > 0
i = i + 1
Debug.Print "Instance_" & i; hWinXL
If GetXLapp(hWinXL, xlApp) Then
For Each wb In xlApp.Workbooks
Debug.Print , wb.Name
Next
End If
hWinXL = FindWindowEx(0, hWinXL, "XLMAIN", vbNullString)
Wend
End Sub
'Function GetXLapp(hWinXL As Long, xlApp As Excel.Application) As Boolean
Function GetXLapp(hWinXL As Long, xlApp As Object) As Boolean
Dim hWinDesk As Long, hWin7 As Long
Dim obj As Object
Dim iid As GUID
Call IIDFromString(StrPtr(IID_IDispatch), iid)
hWinDesk = FindWindowEx(hWinXL, 0&, "XLDESK", vbNullString)
hWin7 = FindWindowEx(hWinDesk, 0&, "EXCEL7", vbNullString)
If AccessibleObjectFromWindow(hWin7, OBJID_NATIVEOM, iid, obj) = S_OK Then
Set xlApp = obj.Application
GetXLapp = True
End If
End Function
Note as written if an instance does not have any loaded workbooks a reference will not be returned (though a workbook can be added using DDE, but convoluted!)
FWIW there are two other very different approaches to grab all running Excel instances though something along the lines of the above is simplest.
Peter Thornton

Similar Messages

  • How to use java api for function activity in embed oracle workflow?

    because i can't install standalone oracle workflow successfully.
    pls tell me how to use java api for function activity in embed oracle workflow?
    are there some patch or pulg-in package?
    ths a lot...........

    The Java Function Activity Agent is not certified for Oracle Workflow embedded in Oracle Applications. Installing standalone workflow should be a lot easier than what you have found, although it looks like you did hit a Pentium 4 issue with the Oracle Universal Installer. I suggest you contact Oracle Support or Oracle Consulting for assistance.
    because i can't install standalone oracle workflow successfully.
    pls tell me how to use java api for function activity in embed oracle workflow?
    are there some patch or pulg-in package?
    ths a lot...........

  • Where I can find documentations on how to use MyComponse API ?

    Where I can find documentation on how to use MyComponse API ?
    Any example ?
    Thanks

    not 100% sure at which point the callout to BEFOREPROCESSCOMPOSE is done, but during the process logs phase, the data in the CVR$ tables is copied into the clg$ tables, and the cvr$ table dml flags cleared
    unles the query is very complex/long running why not join the clg$ tables (only have the data that has changed, so smaller than the cvr$ tables, to your base tables for determining if relevant within the MyCompose needCompose method?
    an example from one of our MyCompose classes is
    public int needCompose(Connection conn, String clientid) throws Throwable{
    boolean baseDirty = false;
    Statement st = conn.createStatement();
    String sql = null;
    int rowCount = 0;
    int fetchCount = 0;
    ResultSet rows;
    // log user
    // sql = "INSERT INTO qpub_log (TIMESTMP,message) "
    // + " values (sysdate, '" + clientid + " assd' )";
    // rowCount += st.executeUpdate(sql);
    // need to compose if there are any relevant changes to assessment details FOR
    // TIR / SOLO assessments
    // Inspection history checklists
    // PIJ marking sheets
    // INSSI
    // Risk Assessment)
    // also changes to (in case of underlying alterations causing data to be withdrawn)
    // STATUS_LOGS
    // ROLE_ASSGNTS
    if(this.baseTableDirty("CDB_OWNER", "ASSESSMENT_DETAILS")){
    return oracle.lite.sync.MyCompose.YES;
    if(this.baseTableDirty("CDB_OWNER", "STATUS_LOGS")){
    sql = "SELECT count(clg.context_key) "
    + "FROM CDB_OWNER.ROLE_ASSGNTS rola "
    + " ,CDB_OWNER.USER_ACCOUNTS usra "
    + " ,CDB_OWNER.CLG$STATUS_LOGS clg "
    + "WHERE usra.user_name = '" + clientid + "' "
    + "AND rola.rolat_rol_code IN ('INSPECTOR','COVER_INSP','DELEG_INSP') "
    + "AND rola.context_key_by=to_char(usra.par_id) "
    + "AND rola.context_key_for=clg.context_key "
    + "AND clg.staa_seq_no=47 ";
    rows = st.executeQuery(sql);
    rows.next();
    fetchCount = rows.getInt(1);
    if (fetchCount != 0) {
    sql = "INSERT INTO qpub_log (TIMESTMP,message) "
    + " values (sysdate, '" + clientid + " assd stal" + fetchCount + "' )";
    rowCount += st.executeUpdate(sql);
    return oracle.lite.sync.MyCompose.YES;
    if(this.baseTableDirty("CDB_OWNER", "ROLE_ASSGNTS")){
    sql = "SELECT count(clg.id) "
    + "FROM CDB_OWNER.ROLE_ASSGNTS rola "
    + " ,CDB_OWNER.USER_ACCOUNTS usra "
    + " ,CDB_OWNER.CLG$ROLE_ASSGNTS clg "
    + "WHERE usra.user_name = '" + clientid + "' "
    + "AND rola.rolat_rol_code IN ('INSPECTOR','COVER_INSP','DELEG_INSP') "
    + "AND rola.context_key_by=to_char(usra.par_id) "
    + "AND rola.id=clg.id ";
    rows = st.executeQuery(sql);
    rows.next();
    fetchCount = rows.getInt(1);
    if (fetchCount != 0) {
    sql = "INSERT INTO qpub_log (TIMESTMP,message) "
    + " values (sysdate, '" + clientid + " assd rola" + fetchCount + "' )";
    rowCount += st.executeUpdate(sql);
    return oracle.lite.sync.MyCompose.YES;
    // if no relevant changes do not compose
    return oracle.lite.sync.MyCompose.NO;
    }

  • Can anyone help me figure out how to use my new LaCie external hard drive to import movies from my camcorder into imovie '09? I ran into so many problems last night!! Was up way past my bedtime!

    Can anyone help me figure out how to use my new LaCie external hard drive to import movies from my camcorder into imovie '09? I ran into so many problems last night!! Was up way past my bedtime!

    I'll stay in this chat ... I answered in the other one ... I have a Sony digital Handycam ... from years ago.  I just got the LaCie and I think I formatted it for only to be used on my Mac ... how should I go about reformatting it to be HFS Extended like you said?

  • I forgot how to use the setting, move the mouse to the upper left corner and the windows become smaller for an overview?

    i forgot how to use the setting, move the mouse to the upper left corner and the windows become smaller for an overview?

    I'm not quite sure what you want - if you want an overview of all open windows, use the F key.. Otherwise please post back and be more specific.

  • [Forum FAQ] How to configure a Data Driven Subscription which get multi-value parameters from one column of a database table?

    Introduction
    In SQL Server Reporting Services, we can define a mapping between the fields that are returned in the query to specific delivery options and to report parameters in a data-driven subscription.
    For a report with a parameter (such as YEAR) that allow multiple values, when creating a data-driven subscription, how can we pass a record like below to show correct data (data for year 2012, 2013 and 2014).
    EmailAddress                             Parameter                      
    Comment
    [email protected]              2012,2013,2014               NULL
    In this article, I will demonstrate how to configure a Data Driven Subscription which get multi-value parameters from one column of a database table
    Workaround
    Generally, if we pass the “Parameter” column to report directly in the step 5 when creating data-driven subscription.
    The value “2012,2013,2014” will be regarded as a single value, Reporting Services will use “2012,2013,2014” to filter data. However, there are no any records that YEAR filed equal to “2012,2013,2014”, and we will get an error when the subscription executed
    on the log. (C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\LogFiles)
    Microsoft.ReportingServices.Diagnostics.Utilities.InvalidReportParameterException: Default value or value provided for the report parameter 'Name' is not a valid value.
    This means that there is no such a value on parameter’s available value list, this is an invalid parameter value. If we change the parameter records like below.
    EmailAddress                        Parameter             Comment
    [email protected]         2012                     NULL
    [email protected]         2013                     NULL
    [email protected]         2014                     NULL
    In this case, Reporting Services will generate 3 reports for one data-driven subscription. Each report for only one year which cannot fit the requirement obviously.
    Currently, there is no a solution to solve this issue. The workaround for it is that create two report, one is used for view report for end users, another one is used for create data-driven subscription.
    On the report that used create data-driven subscription, uncheck “Allow multiple values” option for the parameter, do not specify and available values and default values for this parameter. Then change the Filter
    From
    Expression:[ParameterName]
    Operator   :In
    Value         :[@ParameterName]
    To
    Expression:[ParameterName]
    Operator   :In
    Value         :Split(Parameters!ParameterName.Value,",")
    In this case, we can specify a value like "2012,2013,2014" from database to the data-driven subscription.
    Applies to
    Microsoft SQL Server 2005
    Microsoft SQL Server 2008
    Microsoft SQL Server 2008 R2
    Microsoft SQL Server 2012
    Please click to vote if the post helps you. This can be beneficial to other community members reading the thread.

    For every Auftrag, there are multiple Position entries.
    Rest of the blocks don't seems to have any relation.
    So you can check this code to see how internal table lt_str is built whose first 3 fields have data contained in Auftrag, and next 3 fields have Position data. The structure is flat, assuming that every Position record is related to preceding Auftrag.
    Try out this snippet.
    DATA lt_data TYPE TABLE OF string.
    DATA lv_data TYPE string.
    CALL METHOD cl_gui_frontend_services=>gui_upload
      EXPORTING
        filename = 'C:\temp\test.txt'
      CHANGING
        data_tab = lt_data
      EXCEPTIONS
        OTHERS   = 19.
    CHECK sy-subrc EQ 0.
    TYPES:
    BEGIN OF ty_str,
      a1 TYPE string,
      a2 TYPE string,
      a3 TYPE string,
      p1 TYPE string,
      p2 TYPE string,
      p3 TYPE string,
    END OF ty_str.
    DATA: lt_str TYPE TABLE OF ty_str,
          ls_str TYPE ty_str,
          lv_block TYPE string,
          lv_flag TYPE boolean.
    LOOP AT lt_data INTO lv_data.
      CASE lv_data.
        WHEN '[Version]' OR '[StdSatz]' OR '[Arbeitstag]' OR '[Pecunia]'
             OR '[Mita]' OR '[Kunde]' OR '[Auftrag]' OR '[Position]'.
          lv_block = lv_data.
          lv_flag = abap_false.
        WHEN OTHERS.
          lv_flag = abap_true.
      ENDCASE.
      CHECK lv_flag EQ abap_true.
      CASE lv_block.
        WHEN '[Auftrag]'.
          SPLIT lv_data AT ';' INTO ls_str-a1 ls_str-a2 ls_str-a3.
        WHEN '[Position]'.
          SPLIT lv_data AT ';' INTO ls_str-p1 ls_str-p2 ls_str-p3.
          APPEND ls_str TO lt_str.
      ENDCASE.
    ENDLOOP.

  • About a year ago we purchased a used macbook pro and can not get music to transfer from iPhones to mac

    about a year ago we purchased a used macbook pro and can not get music to transfer from iPhones to mac

    how can i get All music transferred? even non purchased

  • Someone is using faebook to run java script to get data and email from me in windows 8

    someone is using faebook to run java script  to get  data  and  email  from  me in  windows  8

    Is this a developer question?
    Jeff Sanders (MSFT)
    @jsandersrocks - Windows Store Developer Solutions
    @WSDevSol
    Getting Started With Windows Azure Mobile Services development?
    Click here
    Getting Started With Windows Phone or Store app development?
    Click here
    My Team Blog: Windows Store & Phone Developer Solutions
    My Blog: Http Client Protocol Issues (and other fun stuff I support)

  • Using VB API in VBA to edit the Calc Scripts

    Guys,
    Does anyone of you have VBA source code/examples utilizing Essbase API for the following operation.
    I want to copy Calc Script from Server to the client, edit the Script using VBA and copy back the Script to the Server. Any kind of info is appreciated.
    Thanks in advance
    HYPuser

    I posted some real sample code a while back for a completely different function (member renames).
    Renaming Existing Member Names
    So while you'll have to write the calc modification code yourself (or ask Glenn his rate ;-)), this at least shows you how the initialization / login / termination of the API would work. That's probably the most confusing aspect of using the VB API for the first time anyway.
    All that said, if this is from Excel and the user will already be logged in via the Excel Add-In, I believe that you can make life much easier and grab the hCtx directly without any initialization / login/ termination worries. I probably should have done that myself in the example I gave. See Tim Tow's posts in this thread:
    API
    EDIT: Two things I just noticed - first, the code sample I gave even has an example of polling for ProcState, so that gets you closer than I thought! Second, remembered that the line that reads...
    While ProcState.State ESB_STATE_DONE
    ...should actually have a 'less than / greater than' symbol between ProcState.State and ESB_STATE_DONE. Can't get the forum to display them correctly, even in code tags...
    Edited by: TimG on May 16, 2011 2:55 PM

  • How to use custom API's

    Hi All,
    In OIM how can i use my own/Custom API"S. Wher do i need to place the Jar/Class files. Like in other Identity Management tools (I only have the experience of SUN) you can place the files under WEB-INF/lib or WEB-INF/classes and then can easily use them, does OIM provides this/similar kind of functionality and how we can use that.

    Hi,
    If you want to use custom API to create adapter then put the jar file in <OIM_Install>/xellerate/Java Task/
    folder and if you want to use them to create task Schedular then put it in <OIM_Install>/xellerate/Schedular/
    regards

  • How to use KM APIs, Can we use them in Standalone J2ee Application

    Hi Experts,
    I got KM APIs.
    I need to use them to access the KM Repository Content.
    I m a newbie in SAP KM.
    Can anyone help me to use KM APIs.
    For Eg:
    com.sapportals.portal.security.usermanagement.IUser user = …
    IResourceContext resourceContext = new ResourceContext(user);
    RID rid = RID.getRID("/etc");
    try {
      IResource resource = ResourceFactory.getInstance()
                           .getResource(rid, resourceContext);
      if( resource != null ) {
        // resource found
        System.out.println("resource " + resource.getRID() + " found");
      } else {
        // resource not found
        System.out.println("resource " + resource.getRID() + " does not exist");
    catch( ResourceException e ) {
      // problem while retrieving the resource
      System.out.println(
                        "exception while trying to get resource " + e.getRID()
                        + ": " + e.getMessage()
    How will i get the IUser populated?
    Can i use KM APIs from a standalone J2EE application?
    Can i Populate IUser in standalone J2EE application's Servlet?
    Please help me out.
    Waiting for reply
    -pankaj

    Hi Prem,
    Can u tell me how to deploy a war file on to the SAP J2EE server?
    I know how to deploy on Tomcat Server, but dont have any experience abt SAP J2EE server.
    Does SAP J2EE server also have some Webapp directory like TOMCAT where we have to put our WAR File?
    Or to Deploy a WAR File in SAP J2EE server is different, if yes then wats the procedure to do that?
    And can i access the KM APIs in SAP J2EE Server?

  • How to use the API for DATE, MONTH  AND YEAR

    I would like to use the java api in .util.calender in the java api to get the date.
    How to implement the API for the "DATE","MONTH","YEAR" which are available provide by java?
    can someone give me in one complete code?

    From the Java Developers Almanac 1.4:
        Calendar cal = new GregorianCalendar();
        // Get the components of the date
        int era = cal.get(Calendar.ERA);               // 0=BC, 1=AD
        int year = cal.get(Calendar.YEAR);             // 2002
        int month = cal.get(Calendar.MONTH);           // 0=Jan, 1=Feb, ...
        int day = cal.get(Calendar.DAY_OF_MONTH);      // 1...
        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 1=Sunday, 2=Monday, ...

  • How to use Catalog API's

    Hi,
    Can someone please point me to some references or sample implementation where Catalog and Search API functionality is used.
    I want to create a stand-alone windows application much like APILocator.exe to index and search a set of PDF files.
    Thanks
    -Sanjai

    Hi Leonard,
    Thanks for the response.
    Yes I have downloaded the SDK. I'm looking for something more detail as to how to use the catalog APIs to index set of PDF's and use it to search ( if its possible )
    Thanks again
    -Sanjai

  • How to use java api while java programming especially using javase and java swing?

    i need help for java api for undo, redo, htmleditorkit,editorkit.
    in my project i have to use java swing for desktop application but, i need help for how to implement and how to retrieve java api.
    please reply with example or code..

    i need help for java api for undo, redo, htmleditorkit,editorkit.
    in my project i have to use java swing for desktop application but, i need help for how to implement and how to retrieve java api.
    please reply with example or code..
    You find examples and code by searching the internet, not by using forums.
    Start with The Java Tutorials - it has trails for the bulk of the Java functionality.
    See the trail 'How to Write an Undoable Edit Listener'
    http://docs.oracle.com/javase/tutorial/uiswing/events/undoableeditlistener.html
    You learn by DOING - not by reading. Actually DO the tutorial example and try to understand WHAT it does and HOW it does it.
    Then search for other tutorial trails that are of interest.

  • How to use of API for Cancel Sales Orders

    Hi....
    I want to use API for Cancel Sales Orders. Plz give me advice how we can cancel orders. I know that there is procedure provide in ORACLE APPs (i.e. OE_ORDER_PUB.process_order). But in this procedure i know the how to create and update sales order, but how to Cancel order with the use of this API.
    Plz send me soultion as soon as possible. ITS VERY VERY URGENT BASE.
    Thanks in Advance.

    Hi all,
    We are importing Sales Orders on 11.5.9 using OE_Order_PUB.Process_Order API .We have supplied most of the mandatory fields and the same data works from the front end. When we use the API it throws a Ora 20001.
    A snapshot of the error message.
    SQL> exec pk_process_object.process_order('1o');
    Message Count is :2
    Message is RA-20001: User in Package OE_Header_Util Procedure Get_Order_Number
    Message is :User-Defined Exception in Package OE_Header_Util Procedure
    Pre_Write_Process
    Return Status is ErrorU
    PL/SQL procedure successfully completed.
    --------------------------------------------------------------------------------------------

Maybe you are looking for