OliverM
Guest
|
I am trying to reproduce the following sample https://www.add-in-express.com/creating-addins-blog/2011/12/05/excel-calculation-mode-event/
But method private void AddinModule_OnSendMessage(object sender, ADXSendMessageEventArgs e) alway fails on line this.CommandBarsObj.GetType().InvokeMember("ExecuteMso",
System.Reflection.BindingFlags.InvokeMethod,
null, this.CommandBarsObj,
new object[] { "CalculationOptionsAutomatically" });
The reason is that this.CommandBarsObj evaluates to null. But why it is null I do not understand.
Can you please advise?
Kind regards
Oliver |
|
Andrei Smolin
Add-in Express team
Posts: 18830
Joined: 2006-05-11
|
Hello Oliver,
I've reproduced the issue. We will look into this tomorrow. A workaround is to use the object returned via ExcelApp.Commandbars; this implies releasing it after use. Try this code:
private void AddinModule_OnSendMessage(object sender, ADXSendMessageEventArgs e)
{
if (e.Message == WM_OptionAutomatic)
{
System.Diagnostics.Debug.Print("AddinModule_OnSendMessage. WM_OptionAutomatic");
cancelAction = false;
object commandBarsObj = ExcelApp.CommandBars;
commandBarsObj.GetType().InvokeMember("ExecuteMso",
System.Reflection.BindingFlags.InvokeMethod,
null, commandBarsObj,
new object[] { "CalculationOptionsAutomatically" });
Marshal.ReleaseComObject(commandBarsObj);
CheckCalculationMode();
cancelAction = true;
}
else if (e.Message == WM_OptionSemiAutomatic)
{
System.Diagnostics.Debug.Print("AddinModule_OnSendMessage. WM_OptionSemiAutomatic");
cancelAction = false;
object commandBarsObj = ExcelApp.CommandBars;
commandBarsObj.GetType().InvokeMember("ExecuteMso",
System.Reflection.BindingFlags.InvokeMethod,
null, commandBarsObj,
new object[] { "CalculationOptionsAutomaticallyExceptDataTables" });
Marshal.ReleaseComObject(commandBarsObj);
CheckCalculationMode();
cancelAction = true;
}
else if (e.Message == WM_OptionManual)
{
System.Diagnostics.Debug.Print("AddinModule_OnSendMessage. WM_OptionManual");
cancelAction = false;
object commandBarsObj = ExcelApp.CommandBars;
commandBarsObj.GetType().InvokeMember("ExecuteMso",
System.Reflection.BindingFlags.InvokeMethod,
null, commandBarsObj,
new object[] { "CalculationOptionsManuallly" });
Marshal.ReleaseComObject(commandBarsObj);
CheckCalculationMode();
cancelAction = true;
}
else if (e.Message == WM_RibbonOptions)
{
System.Diagnostics.Debug.Print("AddinModule_OnSendMessage. WM_RibbonOptions");
cancelAction = false;
object commandBarsObj = ExcelApp.CommandBars;
commandBarsObj.GetType().InvokeMember("ExecuteMso", System.Reflection.BindingFlags.InvokeMethod, null, commandBarsObj, new object[] { "ApplicationOptionsDialog" });
Marshal.ReleaseComObject(commandBarsObj);
CheckCalculationMode();
cancelAction = true;
}
else if (e.Message == WM_CommandbarOptions)
{
System.Diagnostics.Debug.Print("AddinModule_OnSendMessage. WM_CommandbarOptions");
Office.CommandBars cmBars = ExcelApp.CommandBars;
Office.CommandBarButton btnToolsOptions = cmBars.FindControl(Office.MsoControlType.msoControlButton, 522, Type.Missing, Type.Missing) as Office.CommandBarButton;
if (btnToolsOptions != null)
{
cancelAction = false;
btnToolsOptions.Execute();
CheckCalculationMode();
cancelAction = true;
Marshal.ReleaseComObject(btnToolsOptions);
}
if (cmBars != null) Marshal.ReleaseComObject(cmBars);
}
}
Andrei Smolin
Add-in Express Team Leader |
|
OliverM
Guest
|
Yep, that did the trick!
Appreciate your quick response, Andrei. |
|
nwein
Posts: 577
Joined: 2011-03-28
|
I'm just curious as to the circumstances that would cause the CommanadBarsObj to be null. I have the original code but haven't seen a scenario where the latter object is null...
I'm targeting Excel 2010 32-bit if it matters. |
|
Andrei Smolin
Add-in Express team
Posts: 18830
Joined: 2006-05-11
|
You are welcome, Oliver!
Nir,
The issue occurs in Excel 2013. I will investigate it and post my results here.
Andrei Smolin
Add-in Express Team Leader |
|
Andrei Smolin
Add-in Express team
Posts: 18830
Joined: 2006-05-11
|
We confirm that this is a bug in Add-in Express. It is now filed under #7863 in our bug-tracking database. When the bug is fixed, you'll find that number in whatsnew.txt.
Andrei Smolin
Add-in Express Team Leader |
|
Andrei Smolin
Add-in Express team
Posts: 18830
Joined: 2006-05-11
|
Hello Nir,
We've published Beta 2 of Add-in Express version 8 that fixes this bug. Could you please confirm that it works for you?
Andrei Smolin
Add-in Express Team Leader |
|