Comment savoir si Excel Application est en mode d'édition de cellule?
-
03-07-2019 - |
Question
J'écris un complément Excel à l'aide de COM Interop à partir de .net. J'ai une commande qui ouvre une boîte de dialogue, et de la boîte de dialogue, je fais un peu comme collecter des données à partir de la plage utilisée de plusieurs feuilles. Le problème est que, si une cellule est en mode édition, certains des appels que je dois effectuer vont générer des exceptions. Je souhaiterais pouvoir déterminer à l'avance qu'Excel est en mode édition afin de pouvoir avertir l'utilisateur de la première à la modification de la cellule.
Des idées?
La solution
Il existe une propriété Application.Ready qui est censée vous fournir ces informations, mais en pratique, elle ne fonctionne pas de manière fiable. Voir ici pour un hackaround.
Vous pouvez également envisager de définir Application.Interactive = false pendant que votre code .net remplit ses fonctions.
Autres conseils
Essayez cette fonction:
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
Vous n'avez pas mentionné la langue que vous utilisez. La fonction de SZL est écrite en VB. Depuis que j'utilise C #, je devais le convertir. A bien fonctionné. Voici le code C # équivalent.
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;
}
}
}