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?

Était-ce utile?

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;
            }
        }

    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top