Problem Executing Macro from Ribbon, Runs fine when called from intermediate, or 'normal' butons

Hi,
I've come across a very strange problem, we've been using some fairly simple macro's within excel for the last few months, I've recently come into a strange problem.
I decided to make things easier by putting commands onto the ribbon and creating an addin, as this code is reused by most of our workbooks, and having thousands of files with this code in seems like an awesome way to fill up our drives :)
Basically the code seems to just ignore the saveas command when run from the ribbon, code runs, ends saying successful, in the debugger stepping over the code it appears to step over the saveas command as appears that it's been excused without fail, however
no file gets created, workbook does not get saved and it keeps its original book<x> caption
here's a quick example of my code, I have a class module registering application commands
the ribbon button i'm using is just a print button, using the application print which then calls this before print function
this is the code that fires from the ribbon, we always print out 2 copies i'm not sure if this can be simplified?
If Application.Workbooks.Count = 0 Then Exit Sub
If CheckRangeExists("BVSID") = 1 Then
ActiveWindow.SelectedSheets.PrintOut Copies:=2, Collate:=True, IgnorePrintAreas:=False
End If
Using CTRL P or File Print this works fine, BeforePrint triggers each time, but within Save Invoice it calls the Application.SaveAs function, when this print is fired from the ribbon this simply seems to get ignored
Private Sub App_WorkbookBeforePrint(ByVal Wb As Workbook, Cancel As Boolean)
'check worksheet belongs to bvs plugin
If CheckRangeExists("BVSID") = 1 Then
'code to save
If SaveInvoice = 0 Then Cancel = True
End If
End Sub
incase there is something weird i'm missing, this is the line that throws up no errrors, simply doesn't work, more annoyingly the SaveInvoice function returns no error, which in turn prints out the document, and its only until after you check for the file
you would realise it didn't save, I've since put a check in to check the file has saved, so far everysingle time it does not save from the ribbon, pressing CTRL P or clicking File Print will always save the file?
ActiveWorkbook.SaveAs Filename:=Path & Range("Invoice").Value & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
before I have Application.DisplayAlerts = False and after Application.DisplayAlerts = True
As the code is within an Addin my probably overly basic idea is to create a hidden range with the name BVSID, with the idea the events only fire with the sheets I've created
Finally, If I type the
ActiveWindow.SelectedSheets.PrintOut Copies:=2, Collate:=True, IgnorePrintAreas:=False
in the debug window the code also runs, triggers the before print and saves the files
any help would be most appreciated :)

Thanks for the time!
it works fine when using the normal print button on the custom ui, its when using a macro combined with
ActiveWindow.SelectedSheets.PrintOut
I've just created a blank workbook, with a class module to capture the before print, I've put 2 buttons on the custom ribbon, one using the default command, and the other to call a macro to reference the printout command
before print gets activated on both tries, however the saveas command gets ignored, seems to run, but not do anything when called using the .PrintOut command.
Here's the code I've used to test
This Workbook code
Private XLApp As CExcelEvents
'set applications to be avaliable in the cexcelevents class module
Private Sub Workbook_Open()
Set XLApp = New CExcelEvents
End Sub
Module for custom button (not actually sure if this needs to be in a module but this is to mimic the same behaviour i'm getting with the addin
Sub PrintInvoice(control As IRibbonControl)
ActiveWindow.SelectedSheets.PrintOut Copies:=2, Collate:=True, IgnorePrintAreas:=False
End Sub
Class Events CExcelEvents
'get application events
Private WithEvents App As Application
Private Sub App_WorkbookBeforePrint(ByVal Wb As Workbook, Cancel As Boolean)
ActiveWorkbook.SaveAs "C:\Test\Book1_Copy.xlsm", XlFileFormat.xlOpenXMLWorkbookMacroEnabled
End Sub
Private Sub Class_Initialize()
Set App = Application
End Sub
Private Sub Class_Terminate()
Set App = Nothing
End Sub
CustomUI Code
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="customTab" label="Custom Tab">
<group id="customGroup" label="Custom Group">
<button idMso="FilePrint" imageMso="FilePrint" size="large"/>
<button id="btnPrint" label="Print" imageMso="FilePrint" size="large" onAction="PrintInvoice" supertip="Saves Invoice Then Prints to Default Printer" enabled="true"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
the button id btnprint is what I've been testing with so I copy pasted that button from the customui code I had
I can't see away to add the workbook as an attachment, if needed I can upload it here too, this workbook was just created from scratch just incase its the addin I've got making some weird error

Similar Messages

  • Stored Procedure Does Not Run Properly When Called From Portlet

    We have a simple Java portlet that calls a PL/SQL stored procedure which we wrote. The stored procedure sends a large number of emails to users in our corporation using the "utl_smtp" package. The stored procedure returns a count of the emails back to the Java portlet when it's finished. This number is displayed in the portlet.
    Our problem:
    The stored procedure functions as expected when run from a PL/SQL block in SQL*Plus, and the Java portlet calls the procedure properly when sending out a smaller number of emails (Less than 200 usually). When we get into a higher number of emails the procedure hangs when called from the portlet, but it STILL functions properly from SQL*Plus. It does not return the number of emails sent
    and the Java portlet is unable to return a SQLException. Also, we have noticed that emails are sent at a much slower pace from the stored procedure when it's called from the portlet.

    Any Ideas?

  • Stored procedure runs fine from SSMS but fails when called from the C# app

    I'm using SS Express 2012 so I doubt I have all possible debugging capabilities at my disposal, although I'm still trying to figure this out myself.
    The compiled C# application has logging to insure that the the SP is being invoked, the appropriate line of code is  definitely being reached. The logging always reports 'success' suggesting that the SP was successfully executed (and no exception is thrown
    to the C# app), but the indexes aren't getting rebuilt (I have a fragmentation query proving they are not rebuilt). Yet it runs successfully if I
        (1) set a breakpoint in the C# app and step through the code line by line OR
        (2) run the SP from the SSMS GUI.
    The fragmentation query confirms sucess for both 1 and 2.
    -I can't rely on the GUI because I want to run this overnight immediately after the C# app is finished inserting new records.
    - The SP loops through all the tables, and all the indexes in each table, checking for fragmentation and rebuilding any indexes over 7% fragmented.
    ALTER Procedure [dbo].[usp_RebuildIndexes]
    AS
    Declare @fetch_TableName NVARCHAR(256)
    DECLARE Cursor_Tables CURSOR FOR
    SELECT Name FROM sysobjects WHERE xtype ='U'
    OPEN Cursor_Tables
    While 1 = 1 -- Begin to Loop through all tables
    BEGIN
    FETCH NEXT FROM Cursor_Tables INTO @fetch_TableName -- fetches the next table
    if @@FETCH_STATUS <> 0 break
    print '---------' + @fetch_TableName
    Declare @fetch_indexName NVARCHAR(256) -- loops through al indexes of the current table
    DECLARE Cursor_Indexes CURSOR FOR -- Looking for indexes fragmented more than 7 percent.
    SELECT name as indexName
    FROM sys.dm_db_index_physical_stats (DB_ID(DB_Name()), OBJECT_ID(@fetch_TableName), NULL, NULL, NULL) AS a
    JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id
    Where Name is not null and avg_fragmentation_in_percent > 7
    OPEN Cursor_Indexes
    WHILE 1= 1 -- Begin to Loop through all Indexes
    BEGIN
    FETCH NEXT FROM [Cursor_Indexes] INTO @fetch_indexName
    if @@FETCH_STATUS <> 0 break
    Declare @SqL nvarchar(2000) = N'ALTER INDEX ' + @fetch_indexName + ' ON ' + DB_Name() + '.dbo.' + @fetch_TableName + ' Rebuild'
    print @Sql
    Begin TRy
    Execute sp_executeSQL @sql
    End Try
    Begin Catch
    Declare @err nvarchar(2000) = ERROR_MESSAGE();
    throw 51000, @err, 1
    End Catch
    End -- Ends looping through all indexes
    CLOSE [Cursor_Indexes]
    DEALLOCATE [Cursor_Indexes]
    End -- Ends looping through all tables
    CLOSE Cursor_Tables
    DEALLOCATE Cursor_Tables
    foreach (objDB DB in oUserPrefs.DBs) {
    report += DB.Real_Name;
    if (DB.cn == null) DB.cn = sqlCn(DB.Real_Name, SystemInformation.ComputerName);
    try {
    if (DB.cn.State != ConnectionState.Open) DB.cn.Open();
    } catch (Exception ex) {
    report += " - Failed because can't open a connection.\r\n";
    continue;
    DB.OpenedAConnection = true;
    DataTable dt = null;
    try {
    dt = oParam.fillDt("dbo.usp_RebuildIndexes", DB.cn, null);
    } catch (Exception ex) {
    report += " -failed because " + ex.Message + "\r\n\r\n";
    continue;
    report += " - success.\r\n";
    DB.LastTimeRebuiltIndexes = DateTime.Now;

    Your proc is a bit of a mess and hard to read. This should get you what you need though. I added a little logic in the middle that determines if the index should be reorged, or rebuilt.
    You were right that my script was too messy and I used your code/logic to rewrite mine. Thanks! I tried it this morning and it worked fine, but I will have to see how it runs overnight to be sure.
    Here's the weird thing. My original code should have worked. In fact I'm actually using it in 3 c-sharp apps each of which has 3 to 7  Express 2012 databases (about 10 million records per database). For about a month it's been working fine on two of the
    apps. Furthermore this morning I used a commercial file-comparison tool to verify that the 3rd app has been running an identical version of the SP. So I'm at a total loss as to what went wrong in the 3rd app.
    Here's my rewrite.
    Alter Procedure [dbo].[usp_RebuildIndexes]
    As
    Declare @Messages Table(Msg nvarchar(2000))
    Declare @IndexName nvarchar(256), @TableName NVARCHAR(256)
    DECLARE Cursor_Indexes CURSOR FAST_FORWARD FOR -- GEt a list of all indexes for all tables.
    select idxs.name as indexName, o.Name as TableName
    from sys.indexes idxs
    inner join sysobjects o on idxs.object_id = o.id
    inner join sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL,NULL,NULL) as stats
    on stats.object_id = idxs.object_id and stats.index_id = idxs.index_id
    where xtype = 'u' and idxs.name is not null And avg_fragmentation_in_percent > 7
    OPEN Cursor_Indexes
    While 1 = 1
    BEGIN
    FETCH NEXT FROM Cursor_Indexes INTO @IndexName, @TableName
    if @@FETCH_STATUS <> 0 break
    Declare @SqL nvarchar(2000) = N'ALTER INDEX ' + @IndexName + ' ON ' + DB_Name() + '.dbo.' + @TableName + ' Rebuild'
    insert @Messages(Msg)VALUES(@sql)
    Execute sp_executeSQL @sql
    End
    CLOSE [Cursor_Indexes]
    DEALLOCATE [Cursor_Indexes]
    Select * From @Messages

  • Environment.Exit hangs when called from an application domain exception handler

    I've implemented a handler for exceptions not thrown in the main GUI thread of my C# WinForms application, as follows:
        AppDomain.CurrentDomain.UnhandledException  += OnUnhandledExceptionThrown;
    This handler is called from a background thread. The last statement in this handler is a call to
    Environment.Exit with the application exit code. However, the application hangs in this call. From within Visual Studio, it hangs and I'm unable to break the application; I have to use Task Manager to terminate Visual Studio. Environment.Exit
    works fine when called from the unhandled exception handler for the GUI thread. Is there a better way to terminate the application in the context of an unhandled exception thrown by a background thread?

    Are you just trying to avoid a crash? Environment.Exit can cause deadlocking if exiting in the wrong kind of scenario; if you're just trying to avoid a crash, use
    GetCurrentProcess with
    TerminateProcess to terminate your own process.  It skips the notification phases that Environment.Exit uses which prevents the common deadlock scenarios.
    WinSDK Support Team Blog: http://blogs.msdn.com/b/winsdk/

  • JTextField update problem when called from PropertyChangeEvent

    Hi,
    I'm trying to create forms that can be dynamically loaded with Class.forname(formName).
    Those forms should always inherit some methods that make it easy to pass data to
    them and receive data from them. The idea is that the data comes from a table which
    sends a hashmap (String column/JTextField-name + String Value pairs) with firePropertyChanged
    as soon as a new row is seleceted. The JTextFields in the form are marked with setName("FieldName") that has to correspond to the name of the columns of the table.
    My problem is that I can't update the fields in my form when I'm calling getRow(HashMap)
    from within propertyChangeEvent but that's necessary to keep the forms flexible.
    JTextFieldName.setText(newText) just won't work. But it works when I call getRow(HashMap)
    from the constructor. SwingWorker and threads to update the form didn't help.
    I don't need to call pack() / update() / repaint() on the JFrame, do I ??
    update() / validate() / repaint() etc. didn't work on the JTextField themselves.
    Below is the code for one of the test-forms (just a JPanel that is inserted in a frame)
    with all of it's methods. Does anybody have a solution to this problem ??
    Thanks for taking time for that !!
    Benjamin
    * testTable.java
    * Created on 15. April 2004, 16:12
    package viewcontrol.GUI;
    * @author gerbarmb
    import javax.swing.*;
    import java.awt.*;
    import java.beans.*;
    import java.util.*;
    public class testTable extends javax.swing.JPanel
              implements
                   java.awt.event.KeyListener,
                   java.beans.PropertyChangeListener {
          * public static void main(String[] argv) { testTable tt = new testTable();
          * JFrame jf = new JFrame(); jf.setContentPane(tt); jf.setVisible(true); }
         /** Creates new customizer testTable */
         public testTable() {
              initComponents();
              HashMap hm = new HashMap();
               * Only for debugging, to see that the method getRow() works when
               * called from the constructor.
               hm.put("ttext", "TEst");
               this.getRow(hm);
          * This method is called from within the constructor to initialize the form.
          * WARNING: Do NOT modify this code. The content of this method is always
          * regenerated by the FormEditor.
         private void initComponents() {//GEN-BEGIN:initComponents
              java.awt.GridBagConstraints gridBagConstraints;
              jLabel1 = new javax.swing.JLabel();
              textIn = new javax.swing.JTextField();
              jLabel2 = new javax.swing.JLabel();
              intIn = new javax.swing.JTextField();
              jLabel3 = new javax.swing.JLabel();
              numIn = new javax.swing.JTextField();
              jLabel4 = new javax.swing.JLabel();
              dateIn = new javax.swing.JTextField();
              jLabel5 = new javax.swing.JLabel();
              dateTimeIn = new javax.swing.JTextField();
              jLabel6 = new javax.swing.JLabel();
              jCheckBox1 = new javax.swing.JCheckBox();
              keepValues = new javax.swing.JCheckBox();
              jButton1 = new javax.swing.JButton();
              setLayout(new java.awt.GridBagLayout());
              jLabel1.setText("Text");
              add(jLabel1, new java.awt.GridBagConstraints());
              textIn.setName("ttext");
              textIn.setPreferredSize(new java.awt.Dimension(100, 21));
              textIn.addActionListener(new java.awt.event.ActionListener() {
                   public void actionPerformed(java.awt.event.ActionEvent evt) {
                        textInActionPerformed(evt);
              gridBagConstraints = new java.awt.GridBagConstraints();
              gridBagConstraints.gridwidth = 2;
              add(textIn, gridBagConstraints);
              jLabel2.setText("Integer");
              add(jLabel2, new java.awt.GridBagConstraints());
              intIn.setName("tint");
              intIn.setPreferredSize(new java.awt.Dimension(50, 21));
              add(intIn, new java.awt.GridBagConstraints());
              jLabel3.setText("Number");
              add(jLabel3, new java.awt.GridBagConstraints());
              numIn.setName("tnum");
              numIn.setPreferredSize(new java.awt.Dimension(50, 21));
              add(numIn, new java.awt.GridBagConstraints());
              jLabel4.setText("Date");
              gridBagConstraints = new java.awt.GridBagConstraints();
              gridBagConstraints.gridx = 0;
              gridBagConstraints.gridy = 1;
              add(jLabel4, gridBagConstraints);
              dateIn.setName("tdate");
              dateIn.setPreferredSize(new java.awt.Dimension(50, 21));
              gridBagConstraints = new java.awt.GridBagConstraints();
              gridBagConstraints.gridx = 1;
              gridBagConstraints.gridy = 1;
              add(dateIn, gridBagConstraints);
              jLabel5.setText("DateTime");
              gridBagConstraints = new java.awt.GridBagConstraints();
              gridBagConstraints.gridx = 2;
              gridBagConstraints.gridy = 1;
              add(jLabel5, gridBagConstraints);
              dateTimeIn.setName("tidate");
              dateTimeIn.setPreferredSize(new java.awt.Dimension(80, 21));
              gridBagConstraints = new java.awt.GridBagConstraints();
              gridBagConstraints.gridy = 1;
              add(dateTimeIn, gridBagConstraints);
              jLabel6.setText("Bit");
              gridBagConstraints = new java.awt.GridBagConstraints();
              gridBagConstraints.gridy = 1;
              add(jLabel6, gridBagConstraints);
              jCheckBox1.setName("tbit");
              gridBagConstraints = new java.awt.GridBagConstraints();
              gridBagConstraints.gridy = 1;
              add(jCheckBox1, gridBagConstraints);
              keepValues.setText("keep values");
              gridBagConstraints = new java.awt.GridBagConstraints();
              gridBagConstraints.gridx = 7;
              gridBagConstraints.gridy = 3;
              add(keepValues, gridBagConstraints);
              jButton1.setText("Send");
              jButton1.addActionListener(new java.awt.event.ActionListener() {
                   public void actionPerformed(java.awt.event.ActionEvent evt) {
                        jButton1ActionPerformed(evt);
              gridBagConstraints = new java.awt.GridBagConstraints();
              gridBagConstraints.gridx = 7;
              gridBagConstraints.gridy = 2;
              add(jButton1, gridBagConstraints);
         }//GEN-END:initComponents
         private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
              sendRow();
         }//GEN-LAST:event_jButton1ActionPerformed
         private boolean sendRow() {
              java.util.HashMap hm = new java.util.HashMap();
              Component[] cs = this.getComponents();
              for (int i = 0; i < cs.length; i++) {
                   if (((Component) cs).getName() != null) {
                        if (cs[i] instanceof JCheckBox) {
                             String value = ((JCheckBox) cs[i]).isSelected() ? "1" : "0";
                             hm.put(cs[i].getName(), value);
                        } else if (cs[i] instanceof JCheckBox) {
                             hm.put(cs[i].getName(), ((JTextField) cs[i]).getText());
              } // end for
              firePropertyChange("rowChanged", null, hm);
              return true;
         private void getRow(java.util.HashMap hm) {
              //if (! this.keepValues.isSelected()) {
              Component[] cs = this.getComponents();
              for (int i = 0; i < cs.length; i++) {
                   if (cs[i].getName() != null && hm.containsKey(cs[i].getName())) {
                        Component component = cs[i];
                        String componentName = cs[i].getName();
                        String componentValue = (String) hm.get(component.getName());
                        if (cs[i] instanceof JTextField) {
                             // output for debugging
                             System.out.println("Setting " + cs[i].getName() + " = "
                                       + componentValue);
                             ((JTextField) component).setText(componentValue);
                        } else if (cs[i] instanceof JCheckBox) {
                             // output for debugging
                             System.out.println("JCheckBox found");
                             JCheckBox cb = (JCheckBox) component;
                             boolean selected = (componentValue == null ? false : (componentValue.equals("1")
                                       ? true
                                       : false));
                             ((JCheckBox) component).setSelected(selected);
              } // end for
              /* Uncomment this code snippet to retrieve the text that has been set
              for the components (that means JTextFields)
              This is just for debugging !
              Component[] cs = this.getComponents(); for (int i = 0; i < cs.length;
              i++) { if (cs[i].getName() != null) { if (cs[i] instanceof
              JTextField) { System.out.println("Value of " +cs[i].getName() + " = " +
              ((JTextField) cs[i]).getText()); } } } // end for
         private void textInActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_textInActionPerformed
         }//GEN-LAST:event_textInActionPerformed
         public void keyPressed(java.awt.event.KeyEvent e) {
              if (e.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) {
                   sendRow();
         public void keyReleased(java.awt.event.KeyEvent e) {
         public void keyTyped(java.awt.event.KeyEvent e) {
         public void propertyChange(java.beans.PropertyChangeEvent evt) {
              if (evt.getPropertyName().equals("newRow")) {
                   final PropertyChangeEvent finalEvt = evt;
                   Runnable makeChanges = new Runnable () {
                        public void run() {
                             getRow((java.util.HashMap) finalEvt.getNewValue());
         // Variables declaration - do not modify//GEN-BEGIN:variables
         private javax.swing.JTextField dateIn;
         private javax.swing.JTextField dateTimeIn;
         private javax.swing.JTextField intIn;
         private javax.swing.JButton jButton1;
         private javax.swing.JCheckBox jCheckBox1;
         private javax.swing.JLabel jLabel1;
         private javax.swing.JLabel jLabel2;
         private javax.swing.JLabel jLabel3;
         private javax.swing.JLabel jLabel4;
         private javax.swing.JLabel jLabel5;
         private javax.swing.JLabel jLabel6;
         private javax.swing.JCheckBox keepValues;
         private javax.swing.JTextField numIn;
         private javax.swing.JTextField textIn;
         // End of variables declaration//GEN-END:variables

    The problem of the change in the form not being comitted is that
    I forgot SwingUtilities.invokeLater(makeChanges); in the bottom
    part in public void propertyChange(java.beans.PropertyChangeEvent evt)
    after having created a new Runnable.
    Changes to the UI often have to be comitted by SwingUtitlities.invokeLater()
    though I don't know that much about Swing yet.
    Thanks to everybody who tried to solve that problem.
    Benjamin

  • Running  BDC in 'A' mode when called from Enterprise portal

    HI All,
    I have created a RFC which contains a BDC program that update data in SAP R/3. The RFC is called from Enterprise portal. Is it possible to run the rfc in A(all screen display) mode while calling from EP. I have tried it but it gives following 2 errors on EP
       cm_no_data_received
       rfc_error_communication
    what changes i have to do so that i can run the BDC in 'A ' mode  when called from Enterprise portal

    it would not be related to EP administration issues but something to do with GUI usage. it is loggically fare enough not to give options of viewing the debug screen in as it might concern security issues inway the data could be edited at any point of time. Moreover the screens u see in R3 are ABAP but whereas in EP it is purely based on Java and the calls to SAP is done via JCO thus enabling ABAP functionalities in EP. Maybe for these technical reasons or constraints it wont be possibel to view the screen in EP eventhough u had ext.bp activated

  • The problem by hearing my voice when calling from iMAC

    I use the latest version of OS X and iOS on all my devices (OS X and iOS 8.1.1 10.10.1). The receiving calls through iPhone 5 have a problem with hearing my voice when calling from iMAC. When make incoming, but also outgoing call through iPhone5 on my iMac, I can hear the caller, but he can not hear me, although tilde see sound when I speak to your iMac.
    When the call using my iMac I can hear the caller, but he's not me.
    MacBook Air while everything works smoothly, there hear me. You do not know me with this please help?
    Thanks

    Yes, my microphone works correctly, f.e. skype, record spund for my videos... no problem with microphone on my iMAC

  • Bring Excel 2007 to the front when called from LabView v9 in Windows 7

    I am building a duplicate system using Windows 7, LabView v9 and Excel v2007.  The original system used WinXP, Excel 2007 and LabView v8.6.  The issue is that the original system was able to bring Excel to the front when called from Labview using the property node -application-> visible.  This new configuration runs Excel, loads the data, runs the macros but does not bring Excel to the front.  The icon blinks in the Win7 taskbar and when selected displays over LabView.  If I minimize the Labview window, Excel is there.  This leads me to conclude that Excel is visible, as requested but will not come to the front until selected from the taskbar.  The only differences, besides the versions, is the original system template files used the .xls extension in and was run in Excel in compatible mode.  At the customers request, the new system uses the .xlsm extension on the Excel template files.  I have tried using application.visible = True in the macro as well.  Could be a setting in Labview?  Could be a setting in Excel? Could be .xls vs. .xlsm? Or an issue with Windows 7 and the newer version of Labview. 
    HP workstation - Labview v9 - Windows 7 - Excel 2007 sp2
    Thank you in advance
    Stephen
    Solved!
    Go to Solution.

    I will try the windowstate change.  Were these done in succession? (i.e. property node -> property node -> property node) Or were they done along the way such as call the ActiveX open and a property node then in a worksheet modification area etc. so there was some time between calls? 
    I am not sure about the API since the discussion there is with regard to DDE.  (Taken from the link document:  If you want to call a DLL that contains ActiveX
    objects, use the Automation
    Open VI with the Property
    Node and the Invoke
    Node.).  I am calling Excel as an application not as a library call unless I am mistaken, which I could certainly be.  Are you thinking that once Excel is active through the Automation Open VI that a DLL call to set the application visible would work?  I may be trying this already but in Excel through the use of the macro I call from LabView.  It contains application.visible = True at the beginning before reading files and plotting data.  
    I may try sprinkling Property node with application->visible in various locations in the LabView diagram as I do update cells after the call to the plot macro.  The puzzle for me is the blinking Excel icon in the task bar.  This means active and running but not visible or something wrong as well.  There are a few #VALUE cells if not all test in the system are run.  Again not a problem in Excel 2007-WinXP-LV8.6
    Thank you again one and all.

  • SESSION EXPIRED and CPU Utilisation is 100% when called from Pro*C

    Dear Colleague
    We are having a production system developed using Pro*c and PL/SOL packages in HP Unix.
    The system is doing the following,
    A file will be decoded using Proc and data will be load into 3 temporary tables (permanent table used for temporary) using SQLLoader. Then it calls a PL/SQL package which will process the data in the temporary tables and will store the summary information in Transaction table and will returns a unique id to the calling Pro*c module. The whole process is completed in a single process/oracle session.
    The PL/SQL package, join the 3 Temporary tables and retrieve the data into an Oracle object(Collection) and process it. Then the processing summary will be loaded into Transaction table and return the Primary key.
    Now the problem is, when the temporary tables are loaded with more than 200,000 rows, in some cases the system is running for hours before it finish. And during the process the session shows as EXPIRED in the database and CPU utilization for the respective ProcessId in Unix is almost 100%. Then after a while the session comes alive and finishes the process.
    And for some other cases, with same row count, the entire process finished in seconds.
    If the same process (PL/SQL package) when run directly using a separate session inside the database(and the temporary tables are still available), rather than calling from Pro*c, it finishes in seconds, where it took hours when called from Pro*c.
    It will be highly appreciated, if anyone let me know, what actually is wrong. whether it is the resource allocation or should there any known problem in calling huge PL/SQL packages from Pro*C.
    we are using Oracle 10g and HP-UX ed42 B.11.31 U System.
    regards
    Sajid

    Dear Colleague
    I just want to rephrase the problem again.
    We have a Pro*C application. This will read the binary file and dump the data in ascii format to a data file. Then, within from the pro*C, 14 Dynamic tables will be created using EXEC SQL EXECUTE IMMEDIATE statement, each having almost a maximum of 45 columns. Also, created INDEXES to the tables in the same way from Pro*C.
    And Control file will be created as follows
    OPTIONS (SILENT=(FEEDBACK)) UNRECOVERABLE
    LOAD DATA
    INTO TABLE FILENAME_BCI_USED
    FIELDS  TERMINATED BY '|'
    TRAILING NULLCOLSColumns Listed
    Then Sql loader will be called using system commands (from pro*C itself) to loead the data into the table, as follows.
       sprintf(syscommand,"sqlldr %s CONTROL=%s DATA=%s log=%s rows=5000 direct=true", glb_connect_string,ctl_file,data_file, log_file );
       ret_value = system(syscommand);data loaded successfully.
    Then the Pro*C will call a PL/SQL package for processing the data.
    The PL/SQL package, to process the data, dynamically construct the below query and use it for the reference cursor to retrieve data and load into a collection.
    v_sql_query := 'SELECT '|| '/*+ index(b '||p_File_Name ||'_1) index(b '||p_File_Name ||'_2) index(s '||p_File_Name ||'_3) index(s '||p_File_Name ||'_4) index(s '||p_File_Name ||'_5) index(s '||p_File_Name ||'_6) index(e '||p_File_Name ||'_7)*/'   || '
             iot_call_record(b.rec_no ,
             b.rec_type ,
             substr(b.field1,1,15) ,
             nvl(substr((select s0.field1 from ' || SU_Table ||
                         ' s0 where s0.rec_no = s.rec_no and s0.sub_rec_type = 203) ,1, 25),
                                 substr(b.field2, 1, 25)),
             substr(b.field3,1,25) ,
             b.field4 ,
             b.field5 ,
             s.field1 ,
             s.field2 ,
             (select sum(s1.field1) from ' || SU_Table ||
                         ' s1 where s1.field2 = s.rec_no and trim(s1.field2) = ''00'' ) ,
             s.field3 ,
             e.field2/power(10,e.field3) ,
             s.field4 ,
             s.field5 ,
             s.field6 ,
             s.field7 ,
             s.field8 ,
             s.field9 ,
             s.field10 ,
             nvl(b.field6,''F'') ,
             NULL ,
             s.field11 ,
             (select sum(s2.field11) from ' || SU_Table || ' s2 where s2.rec_no = s.rec_no)  ,
             NULL)
          FROM   ' || BCI_Table || ' b , ' || SU_Table || ' s, ' || EXCH_Table ||
                         ' e WHERE  b.filename = s.filename
            AND    b.rec_no = s.rec_no
            AND    (b.field7 = 0 OR b.field7 = 1)
            AND    TRIM(s.chg_type) = ''00''
            AND    (s.field1 = e.field2_Code )
            AND    not(s.field4 = ''V'' and s.field12 > 1)
            AND    not(s.field4 = ''W'' and s.field12 > 1)
            AND    not(b.rec_type = 75 and s.field12 > 1)
            AND    not(b.rec_type = 75 and s.field4 =''D'')
            AND    s.sub_rec_type <> 203
            and    (s.field12 = 1 or b.rec_type not in (20,30))';
        OPEN cur_call_events FOR v_sql_query;
        LOOP
          g_tab_call_events.DELETE;
          --      Execute immediate v_sql_query bulk collect into g_tab_call_events;
          FETCH cur_call_events BULK COLLECT
            INTO g_tab_call_events limit 5000;
          EXIT WHEN g_tab_call_events.COUNT = 0;
          BEGIN
            SAVEPOINT Block_Begin;
            process_records(p_file_name,
                            g_tab_call_events);
          EXCEPTION
            WHEN Severe_Error THEN
              Write_error('S');
              ROLLBACK TO Block_Begin;
            WHEN Warning THEN
              Write_error('W');
            WHEN NO_DATA_FOUND THEN
              Write_error('S');
              ROLLBACK TO Block_Begin;
          END;
        END LOOP;And the above module is behaving strangely.
    With almost 150K or more rows in BCI_Table & SU_Table each and less than 10 rows in EXCH_Table, the application takes more than 100 minutes to complete the process.
    When we checked the session activity, it is showing the same query for a very long time.
    Where as files with 100K or less rows are getting processed in a minute.
    And the performance for 150K+ rows is inconsistent, that when we isolate the package and run it directly calling from oracle, it is getting executed in less than 4 minutes. Whereas it takes 100+ minutes from Pro*C.
    The execution plan for the above query is given below
                                  Object Owner     Object Name          Cost     Cardinality     Bytes     CPU cost     IO cost
    SELECT STATEMENT, GOAL = HINT: FIRST_ROWS                              494     2497          494406     143334576     483
    TABLE ACCESS BY INDEX ROWID               SCHEMA1          FILENAME_SU_USED     4     1          21     30610          4
      INDEX RANGE SCAN                    SCHEMA1          FILENAME_3          3     1          21764     3
    SORT AGGREGATE                                                  1     13          
      INDEX RANGE SCAN                    SCHEMA1          FILENAME_5          3     1          13     22064          3
    SORT AGGREGATE                                                  1     7          
      TABLE ACCESS BY INDEX ROWID               SCHEMA1          FILENAME_SU_USED     4     1          7     30706          4
       INDEX RANGE SCAN                    SCHEMA1          FILENAME_3          3     1          21764     3
    CONCATENATION                                   
      HASH JOIN                                                  355     2496          1307904     103068617     347
       TABLE ACCESS FULL                    SCHEMA1          FILENAME_EXCH_USED     3     2          26     35987          3
       HASH JOIN                                                  352     2496          813696     96532618     344
        VIEW                         SYS          VW_NSO_1          4     20          880     12549326     3
         HASH UNIQUE                                             4     20          220     12549326     3
          TABLE ACCESS FULL                    SCHEMA2          IOT_SERVICE_MATRIX     3     20          220     45207          3
        HASH JOIN                                                  347     15850          2234850     76145180     341
         TABLE ACCESS FULL                    SCHEMA1          FILENAME_SU_USED     130     16584          1111128     33625872     127
         TABLE ACCESS FULL                    SCHEMA1          FILENAME_BCI_USED     217     23757          1758018     31405896     214
      NESTED LOOPS                                                  139     1          198     40265959     136
       NESTED LOOPS                                                  135     1          154     27716633     133
        NESTED LOOPS                                             132     1          141     27680646     130
         TABLE ACCESS FULL                    SCHEMA1          FILENAME_SU_USED     129     1          67     27655992     127
         TABLE ACCESS BY INDEX ROWID          SCHEMA1          FILENAME_BCI_USED     3     1          74     24654          3
          INDEX RANGE SCAN                    SCHEMA1          FILENAME_1          2     1          15493     2
        TABLE ACCESS FULL                    SCHEMA1          FILENAME_EXCH_USED     3     1          13     35987          3
       VIEW                              SYS          VW_NSO_1          4     1          44     12549326     3
        SORT UNIQUE                                                  4     20          220     12549326     3
         TABLE ACCESS FULL                    SCHEMA2          IOT_SERVICE_MATRIX     3     20          220     45207          3Regards
    Sajid
    Edited by: user12039545 on Jul 11, 2010 12:05 AM
    Edited by: user12039545 on Jul 11, 2010 12:15 AM
    Edited by: user12039545 on Jul 11, 2010 12:32 AM
    Edited by: user12039545 on Jul 11, 2010 12:34 AM
    Edited by: user12039545 on Jul 11, 2010 12:37 AM

  • HR_INFOTYPE_OPERATION not working when called from Dynamic action

    Hi ,
           Senario  : I would like to execute a form from dynamic action which
    creates a record in 0015 (Additional payment IT) .
           I have writen the code as shown below am using FM HR_INFOTYPE_OPERATION
    . When i execute the program from se38 it is creating a record, however it is
    not created when it is called from dynamic action..when i debugged the code in
    inside the FM HR_INFOTYPE_OPERATION there is a FM HR_MAINTAIN_MASTERDATA where
    they are using call dialog (statement) and
    sy-oncom = 'N'   when called from Dynamic action and
    sy-oncom = 'S'   when called executed directly.
    I tried to change the sy-oncom to S while run from Dynamic action it created
    the record.
    So Can anyone explain me abt sy-oncom and how can i resolve the issue..
    code..
    REPORT ZHRPYENH01 .
    perFORM TERMIATION_9000.
    INCLUDE DBPNPMAC.
          FORM Termiation_9000                                          *
    FORM TERMIATION_9000.
    INFOTYPES : 0015.
    *data : i .
    *i ='c'.
    *break-point.
    *message i000(000) with i.
      TABLES : PRELP.
      DATA : P9000 TYPE PA9000." with header line.
      DATA : P0000 TYPE STANDARD TABLE OF  P0000 WITH HEADER LINE.
    DATA : P0015 TYPE STANDARD TABLE OF  P0015 WITH HEADER LINE.
      DATA : HIRE_DATE  LIKE SY-DATUM,
             TERM_DATE  LIKE SY-DATUM.
      DATA : MOLGA LIKE T500L-MOLGA VALUE '25',
             SEQNR LIKE PC261-SEQNR.
      DATA : RGDIR TYPE STANDARD TABLE OF PC261 WITH HEADER LINE.
      DATA : ACTUAL_PERIOD LIKE PA9000-RETENTION.
      DATA : PNP-SW-FOUND TYPE SY-SUBRC ,
             PNP-SY-TABIX TYPE SY-TABIX.
      DATA : TER_PERNR LIKE PA0001-PERNR.
      DATA : REF_PERNR LIKE PA0001-PERNR.
      data : key type BAPIPAKEY.
      data : payed_amount type p0015-BETRG.
    data : future_payment_amount type p0015-BETRG.
    data : p0002 like pa0002.
      types : begin of t_deduction ,
              deducation_date like p0015-begda,
              future_payment_amount type p0015-BETRG.
      types : end of t_deduction.
    data :  future_deduction type standard table of t_deduction with
    *header line.
      data :  future_deduction type  t_deduction .
    data : RETURN type  BAPIRETURN1.
    *data : deduction_p0015 like standard table of p0015 with header line.
    data : deduction_p0015 like p0015 .
    xxxxxxxxxxxxxxxxxxxx
    xxxxxxxxxxxxxxxxx
    ****Prepare 0015 data for deduction
    *deduction for payed amount
    clear deduction_p0015.
    *refresh deduction_p0015.
    deduction_p0015-pernr = REF_PERNR.
    *deduction_p0015-pernr = TER_PERNR.
    deduction_p0015-lgart = 'M120'.
    deduction_p0015-begda = sy-datum + 1 .
    deduction_p0015-endda = sy-datum + 1 .
    deduction_p0015-BETRG = payed_amount.
    deduction_p0015-WAERS = 'SGD'.
    deduction_p0015-ZUORD =  TER_PERNR.
    *append deduction_p0015.
    **deduction for future payment amount
    *loop at future_deduction.
    *clear deduction_p0015.
    *deduction_p0015-pernr = REF_PERNR.
    **deduction_p0015-pernr = TER_PERNR.
    *deduction_p0015-lgart = 'M120'.
    *deduction_p0015-begda = FUTURE_DEDUCTION-DEDUCATION_DATE.
    *deduction_p0015-endda = FUTURE_DEDUCTION-DEDUCATION_DATE.
    *deduction_p0015-BETRG = future_deduction-future_payment_amount.
    *deduction_p0015-WAERS = 'SGD'.
    *deduction_p0015-ZUORD =  TER_PERNR.
    *append deduction_p0015.
    *endloop.
    Create a deduction wage type in 0015 for the employee
    break-point.
    CLEAR RETURN.
    CALL FUNCTION 'BAPI_EMPLOYEET_ENQUEUE'
      EXPORTING
        NUMBER              = REF_PERNR
        VALIDITYBEGIN       = '18000101'
    IMPORTING
       RETURN              = return
    if not return is initial.
    message E000(000) with
    'Referred Employee could not be locked for referal  payment deducation,
    please try after some time'.
    endif.
    CALL FUNCTION 'HR_INFOTYPE_OPERATION'
      EXPORTING
        INFTY                  = '0015'
        NUMBER                 = REF_PERNR
       SUBTYPE                = 'M120'
      OBJECTID               =
      LOCKINDICATOR          =
       VALIDITYEND            = SY-DATUM
       VALIDITYBEGIN          = SY-DATUM
      RECORDNUMBER           =
        RECORD                 = deduction_p0015
        OPERATION              = 'COPY'
      TCLAS                  = 'A'
       DIALOG_MODE            = '2'
      NOCOMMIT               =
      VIEW_IDENTIFIER        =
      SECONDARY_RECORD       =
    IMPORTING
       RETURN                 = return
       KEY                    = key
    break-point.
    COMMIT WORK.
    if not return is initial.
    *return-TYPE
    *ID
    *NUMBER
    *MESSAGE
    message I000(000) with return-MESSAGE.
    endif.
    CALL FUNCTION 'BAPI_EMPLOYEET_DEQUEUE'
      EXPORTING
        NUMBER              = REF_PERNR
        VALIDITYBEGIN       = '18000101'
    IMPORTING
       RETURN              = return
    xxxxxxxxxxxxxxxxxxxx
    xxxxxxxxxxxxxxxxx
    Thanks and regards
    -Senthil Bala
    Message was edited by: senthil bala

    Hi Senthil
    Why at all U want a subroutine to create a record in IT0015 through Dynamic action.There are some standard codes available to update infotypes.
    Let me give U an example
    14     9CON     BETRG     4     2     I     INS,0015 This will create a record in IT0015 when IT0014 is updated with Wagetype 9CON
    14     9CON     BETRG     4     3     W     P0015-LGART='5400' Set wagetype for IT0015(Here U can use a subroutine call to set the wagetype)
    14     9CON     BETRG     4     4     W     P0015-BETRG=P0014-BETRG set amount for IT0015(Here U can use a subroutine call to get the amount)
    14     9CON     BETRG     4     5     W     P0015-BEGDA=P0014-ENDDA set the dates(Here U can use a subroutine call to set the dates)
    Hope this will help U.
    Please award points if helpful

  • PicDelete and PicLoad asking to save changes when called from SUD

    Hello!
    I'm trying to load different reports, change text values and graphics and export those reports to images. Sometimes I want to remove all reportsheets and load a new layout, but when calling picdelete a messagebox pops up and asks the user whether he wants to save the changes. I'm trying to get rid of that messagebox because my script gets halted and I don't want the user to overwrite my layout.
    This only happens when picdelete is called from a SUD and for the picdelete command this behaviour can be circumvented by using Call Execute("Call picdelete"). Sadly the same procedure does not work for the picload command.
    When called from the DIAdem scripting tab the report is loaded fine but I have found no way to use this command from a SUD without the messagebox appearing.
    Is there a workaround? Does DIAdem 2012 show the same behaviour?
    Edit: I guess I was wrong about that Call Execute("Call picdelete") workaround. I'm seeing the same messagebox. I don't know why I thought that helped.
    Best regards,
    grmume
    PS: I'm using DIAdem 2011

    Hi grmume
    In DIAdem 2012 the behavior is the same. But we have a completely new easy to use object oriented programming interface. There exist a method that reset the modified status of the Report
    http://zone.ni.com/reference/en-XX/help/370858K-01/reportapi/methods/report_method_resetmodified_ire...
    In former versions you only have the readonly variable PicIsChanged.
    But I tried a small script in DIAdem 2011 after changing the layout and it does not ask for saving the layout.
    call PicDelete
    Call picload("Demo.TDR")
     Hope this helps
    Winfried

  • Failed to load TemplateStream when called from API, but OK in Workbench

    I am getting a "Failed to load TemplateStream for FormQuery" error when I invoke a simple process using the Java API.  When I invoke the same process from WorkBench it's fine.  I am using the FormsService in ES 8.2 turnkey installation.  The operation is "renderPDFForm".  Content Root URI is set to repository:// and Form to Render is set to /CANS_ASP/CANS_ASP.pdf, which is in the repository.  Why would this work when invoked by way of right clicking in WorkBench, but not work when the process is invoked by the Java API?
    Here's the whole error:
    2009-08-25 20:31:23,109 ERROR [com.adobe.workflow.AWS] An exception was thrown with name com.adobe.livecycle.formsservice.exception.RenderFormException message:Failed to load TemplateStream for FormQuery=/CANS_ASP/CANS_ASP.pdf from location URI =repository://. while invoking service FormsService and operation renderPDFForm and no fault routes were found to be configured.
    Thanks.
    Jared

    This problem is not solved, but I have a workaround.  I have gotten it working by avoiding the repository and specifying the form location from the file system.  This works:
    Content Root URI: file:///C:\\
    Form to Render: CANS_ASP.pdf
    In case it wasn't clear, I'm not using a FormServiceClient object.  I'm invoking an orchestration using a ServiceClient.  The Content Root URI and Form To Render are specified in the properties of my renderPDFForm component in Workbench.  I'm able to move ahead with development using this workaround for now, but the question remains about why repository:// does not work when my orchestration is invoked using the Java API but it works fine when tested from WorkBench.
    Jared Langdon

  • Advanced table:not able to view more than 10 rows when called from workflow

    Hi everyone,
    I'm calling a page that contains advanced table and its controller class from two places.
    First one is from a inquiry form, when this page is called it works fine. when there are more than 10 rows, first 10 are shown on page render and when we click on Next link, other rows are shown. This is becuase I have given the records displayed property on adavanced table = 10. I'm fine till here.
    Second one is I'm calling this page again from a workflow notificaiton. There is a link called view more details on the workflow notification , click of this link will open the page with 10 records displayed. But when user tries to click on Next it doesn't work. It just doesn't refresh.
    Its very wierd,. not able to understand what could be wrong when calling from wf notificiton. Its the same page and conroller code used in both the places.
    Please help me!!
    Thanks
    Sunny

    Thanks for your response Kristofer. You are correct, there was a difference in the parameters and the issue is resolved now.

  • Exported pdf from indesign drops punctuation when printed from adobe reader

    The pdf prints fine when printed from acrobat pro, but depending on the export pdf settings from indesign, it will drop most numbers and punctuation when printed from adobe reader.

    Is Adobe Reader installed on the same computer Adobe Acrobat is?

  • Query response time takes more time when calling from package

    SELECT
    /* UTILITIES_PKG.GET_COUNTRY_CODE(E.EMP_ID,E.EMP_NO) COUNTRY_ID */
    (SELECT DISTINCT IE.COUNTRY_ID
    FROM DOCUMENT IE
    WHERE IE.EMP_ID =E.EMP_ID
    AND IE.EMP_NO = E.EMP_NO
    AND IE.STATUS = 'OPEN' ) COUNTRY_ID
    FROM EMPLOYEE E
    CREATE OR REPLACE PACKAGE BODY UTILITIES_PKG AS
    FUNCTION GET_COUNTRY_CODE(P_EMP_ID IN VARCHAR2, P_EMP_NO IN VARCHAR2)
    RETURN VARCHAR2 IS
    L_COUNTRY_ID VARCHAR2(25) := '';
    BEGIN
    SELECT DISTINCT IE.COUNTRY_ID
    INTO L_COUNTRY_ID
    FROM DOCUMENT IE
    WHERE IE.EMP_ID = P_EMP_ID
    AND IE.EMP_NO = P_EMP_NO
    AND IE.STATUS = 'OPEN';
    RETURN L_COUNTRY_ID;
    EXCEPTION
    WHEN OTHERS THEN
    RETURN 'CONT';
    END;
    END UTILITIES_PKG;
    when I run above query its coming in 1.2 seconds.but when comment subquery and call from package its taking 9 seconds.query returns more than 2000 records.i am not able to find the reason why it is taking more time when calling from package?

    You are getting a different plan when you run it as PL/SQL most likely. Comment your statement:
    SELECT /* your comment here */then find them in V$SQL and get the SQL IDs. You can then use DBMS_XPLAN.DISPLAY_CURSOR to see what is actually happening.
    http://www.psoug.org/reference/dbms_xplan.html

Maybe you are looking for

  • Socket problem after upgrading to Xcode 4.2 and Mac OS 10.7.2

    Hi, I am writing a client app to connect to a java server using the method explained in http://developer.apple.com/library/ios/#qa/qa1652/_index.html Everything was working fine until I upgraded to Xcode 4.2 and Mac OS 10.7.2 yesterday. The server ca

  • How to print PeopleSoft page in the landscape mode automatically???

    hi We have a requirement from the client, who wants to get it implemented urgently. The peopletools version is 8.16 and appversion is 8.0 The requirement is as follows:Whenever the user prints on the Print button on a page, the page should get printe

  • NEW GL profit center settings

    Hi All In NEW GL , Do we have to do the same settings in tcode 0KE5 transaction code...Or anything deifferent from classic PCA to new PCA?

  • Pismo with Tiger won't go into target disk mode

    I recently upgraded my Pismo to Tiger and can't seem to boot into firewire target disk mode. The computer restarts and gives me a terminal screen that reads: "can't OPEN DISK" and then goes on to say "Welcome to Open Firmware. To continue booting, ty

  • APEX 3.1.1.00.09 – HTTP-400 Bad Request

    We have some users who are experiencing what appears to be a browser problem in one of our APEX applications. When clicking on any button that does an insert or update to the database some users get an HTTP-400 Bad Request error message. The database