Dan Waters
df.waters at comcast.net
Mon May 9 12:02:24 CDT 2011
Hi John, I've had this issue too. It's almost certainly that somewhere in your code you are missing an Excel object qualifier. Also take a look at the sequence of opening and closing the Workbook and the instance of Excel. Another issue is that if the PC already has Excel open, then the workbook you create will be contained within the instance of Excel, and it turns out that it's about impossible for your code to loop through the different workbooks. The best plan is probably to look for an instance of Excel and close it with save = true. Then open your workbook and you should be fine. You'll need to tell your users what's going to happen (and maybe ask by message if they want to continue), and/or put up a message if you need to close/save an already open instance of Excel. See this code: '----------------- Private Sub FormatSpreadsheetDemo(stgPath As String) Dim objExcel As Object Dim objWorkbook As Object ' Dim objExcel As Excel.Application '-- TEST ' Dim objWorkbook As Excel.Workbook '-- TEST If IsNull(stgPath) Or stgPath = "" Then Exit Sub Set objExcel = CreateObject("Excel.Application") '-- for troubleshooting ' objExcel.Visible = true '-- TEST ' objExcel.ActiveWindow.WindowState = xlMaximized '-- TEST Set objWorkbook = objExcel.Workbooks.Open(stgPath) '-- Format objExcel.Rows("1:1").Select objExcel.Selection.Font.Bold = True objExcel.Cells.Select objExcel.Selection.Font.Name = "Tahoma" objExcel.Selection.Font.Size = 10 objExcel.Cells.EntireColumn.AutoFit '-- Freeze rows If InStr(stgPath, "Backups") = 0 Then objExcel.Range("A2").Select Else objExcel.Range("B2").Select End If objExcel.ActiveWindow.FreezePanes = True objExcel.ActiveWindow.WindowState = xlMaximized '-- Change column format If InStr(stgPath, "Activity") <> 0 Then objExcel.Columns("E:E").Select objExcel.Selection.NumberFormat = "[$-409]h:mm AM/PM;@" objExcel.Columns("G:G").Select objExcel.Selection.NumberFormat = "[$-409]h:mm AM/PM;@" End If '-- Select upper left cell objExcel.Range("A1").Select '-- Save & Quit objWorkbook.Save objWorkbook.Close objExcel.Quit Set objWorkbook = Nothing Set objExcel = Nothing Exit Sub ErrEx.Bookmark = BOOKMARK_ONERROR End Sub '------------------ -----Original Message----- From: dba-vb-bounces at databaseadvisors.com [mailto:dba-vb-bounces at databaseadvisors.com] On Behalf Of jwcolby Sent: Monday, May 09, 2011 10:44 AM To: VBA Subject: [dba-VB] C# Excel automation We are trying to automate Excel from C# but we are unable to correctly close the excel object itself. IOW it is still seen in the process list. Paul has found information about marshal.releasecomobject and is doing that for every object he is even touching but something is still not working. Can anyone provide a simple example of opening a workbook, and reading a set of cells out of a worksheet, then cleaning up and closing Excel. TIA for your assistance. -- John W. Colby www.ColbyConsulting.com _______________________________________________ dba-VB mailing list dba-VB at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/dba-vb http://www.databaseadvisors.com