Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
My C# add-in implements IDTExtensibility2. As long as I don't sync my
add-in to any Excel events, it works perfectly and the Excel instance is removed when Excel is shut down. However, my add-in must listen to some Excel events. I hook them up during OnConnection, like so (using any of the Excel Workbook events gives the same problem): applicationObject.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen); Once I add this line of code, the Excel instance sticks around, even after Excel is terminated and released. Removing the delegate from the event (and releaseing the COM reference) in the OnDisconnection method does not help. Using .Net 2.0 and the issue exists with at least Office XP and 2003. The code used to test the creation and release of the Excel instance is he Sub Test() Set oXL = CreateObject("Excel.Application") Set WBs = oXL.Workbooks Set Wkbk = WBs.Add Set Wkbk = Nothing Set WBs = Nothing oXL.Quit Set oXL = Nothing End Sub |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
You need to close your workbook. Not sure if youwill get an error with
savechanges. My need to eliminate Savechanges. Sub Test() Set oXL = CreateObject("Excel.Application") Set WBs = oXL.Workbooks Set Wkbk = WBs.Add Wkbk.Close savechanges:=False Set Wkbk = Nothing Set WBs = Nothing oXL.Quit Set oXL = Nothing End Sub " wrote: My C# add-in implements IDTExtensibility2. As long as I don't sync my add-in to any Excel events, it works perfectly and the Excel instance is removed when Excel is shut down. However, my add-in must listen to some Excel events. I hook them up during OnConnection, like so (using any of the Excel Workbook events gives the same problem): applicationObject.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen); Once I add this line of code, the Excel instance sticks around, even after Excel is terminated and released. Removing the delegate from the event (and releaseing the COM reference) in the OnDisconnection method does not help. Using .Net 2.0 and the issue exists with at least Office XP and 2003. The code used to test the creation and release of the Excel instance is he Sub Test() Set oXL = CreateObject("Excel.Application") Set WBs = oXL.Workbooks Set Wkbk = WBs.Add Set Wkbk = Nothing Set WBs = Nothing oXL.Quit Set oXL = Nothing End Sub |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
On Sep 17, 10:21*am, Joel wrote:
You need to close your workbook. *Not sure if youwill get an error with savechanges. *My need to eliminate Savechanges. Sub Test() * * Set oXL = CreateObject("Excel.Application") * * Set WBs = oXL.Workbooks * * Set Wkbk = WBs.Add * * Wkbk.Close savechanges:=False * * Set Wkbk = Nothing * * Set WBs = Nothing * * oXL.Quit * * Set oXL = Nothing End Sub " wrote: My C# add-in implements IDTExtensibility2. *As long as I don't sync my add-in to any Excel events, it works perfectly and the Excel instance is removed when Excel is shut down. However, my add-in must listen to some Excel events. I hook them up during OnConnection, like so (using any of the Excel Workbook events gives the same problem): applicationObject.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen); Once I add this line of code, the Excel instance sticks around, even after Excel is terminated and released. *Removing the delegate from the event (and releaseing the COM reference) in the OnDisconnection method does not help. Using .Net 2.0 and the issue exists with at least Office XP and 2003. The code used to test the creation and release of the Excel instance is he Sub Test() * * Set oXL = CreateObject("Excel.Application") * * Set WBs = oXL.Workbooks * * Set Wkbk = WBs.Add * * Set Wkbk = Nothing * * Set WBs = Nothing * * oXL.Quit * * Set oXL = Nothing End Sub Joel - that makes no difference. The instance of Excel disappears correctly as long as I don't connect to any Excel events in the OnConnection method. The VB is fine. |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
When you open an event it returns the Process ID number. You need to KILL
that process. Not sure the format of the instructions. You Should be able to do something like this ProcID = Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen); The ProcID will be the same number that you would see in the Task Manager. If you don't see the PROCID in the task manager you need to add a column in the Menu View - Select Columns " wrote: On Sep 17, 10:21 am, Joel wrote: You need to close your workbook. Not sure if youwill get an error with savechanges. My need to eliminate Savechanges. Sub Test() Set oXL = CreateObject("Excel.Application") Set WBs = oXL.Workbooks Set Wkbk = WBs.Add Wkbk.Close savechanges:=False Set Wkbk = Nothing Set WBs = Nothing oXL.Quit Set oXL = Nothing End Sub " wrote: My C# add-in implements IDTExtensibility2. As long as I don't sync my add-in to any Excel events, it works perfectly and the Excel instance is removed when Excel is shut down. However, my add-in must listen to some Excel events. I hook them up during OnConnection, like so (using any of the Excel Workbook events gives the same problem): applicationObject.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen); Once I add this line of code, the Excel instance sticks around, even after Excel is terminated and released. Removing the delegate from the event (and releaseing the COM reference) in the OnDisconnection method does not help. Using .Net 2.0 and the issue exists with at least Office XP and 2003. The code used to test the creation and release of the Excel instance is he Sub Test() Set oXL = CreateObject("Excel.Application") Set WBs = oXL.Workbooks Set Wkbk = WBs.Add Set Wkbk = Nothing Set WBs = Nothing oXL.Quit Set oXL = Nothing End Sub Joel - that makes no difference. The instance of Excel disappears correctly as long as I don't connect to any Excel events in the OnConnection method. The VB is fine. |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Joel - I'm not sure I understand your last post - see he it seems
an event handler is what gets returned, not a ProcID. Excel.AppEvents_SheetSelectionChangeEventHandler EventDel_SheetSelectionChange; OnConnection(...){ EventDel_SheetSelectionChange = new AppEvents_SheetSelectionChangeEventHandler(API.App lication_SheetSelectionChange); m_Excel.SheetSelectionChange += EventDel_SheetSelectionChange; } OnDisconnection(...){ m_Excel.SheetSelectionChange -= EventDel_SheetSelectionChange; Marshal.ReleaseComObject(EventDel_SheetSelectionCh ange); EventDel_SheetSelectionChange = null; } On Sep 17, 10:52*am, Joel wrote: When you open an event it returns the Process ID number. *You need to KILL that process. *Not sure the format of the instructions. You Should be able to do something like this ProcID = Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen); The ProcID will be the same number that you would see in the Task Manager.. * If you don't see the PROCID in the task manager you need to add a column in the Menu View - Select Columns " wrote: On Sep 17, 10:21 am, Joel wrote: You need to close your workbook. *Not sure if youwill get an error with savechanges. *My need to eliminate Savechanges. Sub Test() * * Set oXL = CreateObject("Excel.Application") * * Set WBs = oXL.Workbooks * * Set Wkbk = WBs.Add * * Wkbk.Close savechanges:=False * * Set Wkbk = Nothing * * Set WBs = Nothing * * oXL.Quit * * Set oXL = Nothing End Sub " wrote: My C# add-in implements IDTExtensibility2. *As long as I don't sync my add-in to any Excel events, it works perfectly and the Excel instance is removed when Excel is shut down. However, my add-in must listen to some Excel events. I hook them up during OnConnection, like so (using any of the Excel Workbook events gives the same problem): applicationObject.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen); Once I add this line of code, the Excel instance sticks around, even after Excel is terminated and released. *Removing the delegate from the event (and releaseing the COM reference) in the OnDisconnection method does not help. Using .Net 2.0 and the issue exists with at least Office XP and 2003. The code used to test the creation and release of the Excel instance is he Sub Test() * * Set oXL = CreateObject("Excel.Application") * * Set WBs = oXL.Workbooks * * Set Wkbk = WBs.Add * * Set Wkbk = Nothing * * Set WBs = Nothing * * oXL.Quit * * Set oXL = Nothing End Sub Joel - that makes no difference. *The instance of Excel disappears correctly as long as I don't connect to any Excel events in the OnConnection method. *The VB is fine. |
#6
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Joel - Certainly killing the process would stop it from hanging
around, but that hardly is a proper solution - if the process goes away by itself so long as I don't hook into an Excel application event, then clearly there is something that needs to be released related to the evtn handling that would produce the same result. Killing the process when teh add-in is disconnected is incredibly dangerous; for example, what if the user just wishes to remove that add-in, but keep Excel open? On Sep 17, 10:52*am, Joel wrote: When you open an event it returns the Process ID number. *You need to KILL that process. *Not sure the format of the instructions. You Should be able to do something like this ProcID = Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen); The ProcID will be the same number that you would see in the Task Manager.. * If you don't see the PROCID in the task manager you need to add a column in the Menu View - Select Columns " wrote: On Sep 17, 10:21 am, Joel wrote: You need to close your workbook. *Not sure if youwill get an error with savechanges. *My need to eliminate Savechanges. Sub Test() * * Set oXL = CreateObject("Excel.Application") * * Set WBs = oXL.Workbooks * * Set Wkbk = WBs.Add * * Wkbk.Close savechanges:=False * * Set Wkbk = Nothing * * Set WBs = Nothing * * oXL.Quit * * Set oXL = Nothing End Sub " wrote: My C# add-in implements IDTExtensibility2. *As long as I don't sync my add-in to any Excel events, it works perfectly and the Excel instance is removed when Excel is shut down. However, my add-in must listen to some Excel events. I hook them up during OnConnection, like so (using any of the Excel Workbook events gives the same problem): applicationObject.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen); Once I add this line of code, the Excel instance sticks around, even after Excel is terminated and released. *Removing the delegate from the event (and releaseing the COM reference) in the OnDisconnection method does not help. Using .Net 2.0 and the issue exists with at least Office XP and 2003. The code used to test the creation and release of the Excel instance is he Sub Test() * * Set oXL = CreateObject("Excel.Application") * * Set WBs = oXL.Workbooks * * Set Wkbk = WBs.Add * * Set Wkbk = Nothing * * Set WBs = Nothing * * oXL.Quit * * Set oXL = Nothing End Sub Joel - that makes no difference. *The instance of Excel disappears correctly as long as I don't connect to any Excel events in the OnConnection method. *The VB is fine. |
#7
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
You need to use CloseEvent and pass it the Handle Number.
" wrote: Joel - Certainly killing the process would stop it from hanging around, but that hardly is a proper solution - if the process goes away by itself so long as I don't hook into an Excel application event, then clearly there is something that needs to be released related to the evtn handling that would produce the same result. Killing the process when teh add-in is disconnected is incredibly dangerous; for example, what if the user just wishes to remove that add-in, but keep Excel open? On Sep 17, 10:52 am, Joel wrote: When you open an event it returns the Process ID number. You need to KILL that process. Not sure the format of the instructions. You Should be able to do something like this ProcID = Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen); The ProcID will be the same number that you would see in the Task Manager.. If you don't see the PROCID in the task manager you need to add a column in the Menu View - Select Columns " wrote: On Sep 17, 10:21 am, Joel wrote: You need to close your workbook. Not sure if youwill get an error with savechanges. My need to eliminate Savechanges. Sub Test() Set oXL = CreateObject("Excel.Application") Set WBs = oXL.Workbooks Set Wkbk = WBs.Add Wkbk.Close savechanges:=False Set Wkbk = Nothing Set WBs = Nothing oXL.Quit Set oXL = Nothing End Sub " wrote: My C# add-in implements IDTExtensibility2. As long as I don't sync my add-in to any Excel events, it works perfectly and the Excel instance is removed when Excel is shut down. However, my add-in must listen to some Excel events. I hook them up during OnConnection, like so (using any of the Excel Workbook events gives the same problem): applicationObject.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen); Once I add this line of code, the Excel instance sticks around, even after Excel is terminated and released. Removing the delegate from the event (and releaseing the COM reference) in the OnDisconnection method does not help. Using .Net 2.0 and the issue exists with at least Office XP and 2003. The code used to test the creation and release of the Excel instance is he Sub Test() Set oXL = CreateObject("Excel.Application") Set WBs = oXL.Workbooks Set Wkbk = WBs.Add Set Wkbk = Nothing Set WBs = Nothing oXL.Quit Set oXL = Nothing End Sub Joel - that makes no difference. The instance of Excel disappears correctly as long as I don't connect to any Excel events in the OnConnection method. The VB is fine. |
#8
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I don't know C# but I'd look further into this bit
Removing the delegate from the event (and releaseing the COM reference) in the OnDisconnection method does not help. maybe you have more than one reference that you have not released (not necessarily the app) Regards, Peter T wrote in message ... My C# add-in implements IDTExtensibility2. As long as I don't sync my add-in to any Excel events, it works perfectly and the Excel instance is removed when Excel is shut down. However, my add-in must listen to some Excel events. I hook them up during OnConnection, like so (using any of the Excel Workbook events gives the same problem): applicationObject.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen); Once I add this line of code, the Excel instance sticks around, even after Excel is terminated and released. Removing the delegate from the event (and releaseing the COM reference) in the OnDisconnection method does not help. Using .Net 2.0 and the issue exists with at least Office XP and 2003. The code used to test the creation and release of the Excel instance is he Sub Test() Set oXL = CreateObject("Excel.Application") Set WBs = oXL.Workbooks Set Wkbk = WBs.Add Set Wkbk = Nothing Set WBs = Nothing oXL.Quit Set oXL = Nothing End Sub |
#9
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Peter - I agree that, in theory that would be causing the problem; I
just don't know what I could do differently in my code - again, here are the code snippets: Excel.AppEvents_SheetSelectionChangeEventHandler EventDel_SheetSelectionChange; OnConnection(...){ EventDel_SheetSelectionChange = new AppEvents_SheetSelectionChangeEventHandler(API.App lication_SheetSelectionChange); m_Excel.SheetSelectionChange += EventDel_SheetSelectionChange; } OnDisconnection(...){ m_Excel.SheetSelectionChange -= EventDel_SheetSelectionChange; Marshal.ReleaseComObject(EventDel_SheetSelectionCh ange); EventDel_SheetSelectionChange = null; } On Sep 17, 3:55*pm, "Peter T" <peter_t@discussions wrote: I don't know C# but I'd look further into this bit Removing the delegate from the event (and releaseing the COM reference) in the OnDisconnection method does not help. maybe you have more than one reference that you have not released (not necessarily the app) Regards, Peter T wrote in message ... My C# add-in implements IDTExtensibility2. *As long as I don't sync my add-in to any Excel events, it works perfectly and the Excel instance is removed when Excel is shut down. However, my add-in must listen to some Excel events. I hook them up during OnConnection, like so (using any of the Excel Workbook events gives the same problem): applicationObject.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen); Once I add this line of code, the Excel instance sticks around, even after Excel is terminated and released. *Removing the delegate from the event (and releaseing the COM reference) in the OnDisconnection method does not help. Using .Net 2.0 and the issue exists with at least Office XP and 2003. The code used to test the creation and release of the Excel instance is he Sub Test() * *Set oXL = CreateObject("Excel.Application") * *Set WBs = oXL.Workbooks * *Set Wkbk = WBs.Add * *Set Wkbk = Nothing * *Set WBs = Nothing * *oXL.Quit * *Set oXL = Nothing End Sub |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Add-in with IDTExtensibility2 and worksheet formulae | Excel Programming | |||
Excel 12 New Release | Excel Discussion (Misc queries) | |||
IDTExtensibility2 | Excel Programming | |||
IDTExtensibility2.OnConnection Event | Excel Programming | |||
How to release the EXCEL.EXE procedure? | Excel Programming |