I\'m writing an Excel Addin using COM Interop from .net. I have a command that pops up a dialog, and from the dialog I do some work like collecting data from the used range
There is an Application.Ready property that is supposed to give you this information but in practice it doesn't work reliably. See here for a hackaround.
You might also want to look at setting Application.Interactive=false while your .net code is doing its stuff.
Try this function:
Function IsInEditMode(ByRef exapp As Excel.Application) As Boolean
If exapp.Interactive = False Then
Return False
Else
Try
exapp.Interactive = False
exapp.Interactive = True
Return False
Catch
Return True
End Try
End If
End Function
You didn't mention which language you're using. SZL's function is written in VB. Since I'm using C# I had to convert it. Worked great. Here is the equivalent C# code.
bool IsInEditMode(ref Microsoft.Office.Interop.Excel.Application exapp)
{
if (exapp.Interactive == false)
{
return false;
}
else
{
try
{
exapp.Interactive = false;
exapp.Interactive = true;
return false;
}
catch
{
return true;
}
}
}