jwcolby
jwcolby at colbyconsulting.com
Mon May 9 12:22:59 CDT 2011
Is this VBA or VB.Net? John W. Colby www.ColbyConsulting.com On 5/9/2011 1:02 PM, Dan Waters wrote: > 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 > > > > _______________________________________________ > dba-VB mailing list > dba-VB at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/dba-vb > http://www.databaseadvisors.com > >