Domanda

Sto scrivendo un componente aggiuntivo di Excel usando COM Interop da .net. Ho un comando che fa apparire una finestra di dialogo e dalla finestra di dialogo faccio un po 'come raccogliere dati dall'intervallo usato di diversi fogli. Il problema è che se una cella è in modalità di modifica, alcune delle chiamate che devo effettuare genereranno eccezioni. Vorrei un modo per determinare in anticipo che Excel è in modalità di modifica, in modo da poter avvisare l'utente di completare prima la modifica della cella.

Qualche idea?

È stato utile?

Soluzione

Esiste una proprietà Application.Ready che dovrebbe fornirti queste informazioni ma in pratica non funziona in modo affidabile. Vedi qui per un trucco.

Potresti anche voler guardare l'impostazione di Application.Interactive = false mentre il tuo codice .net sta facendo le sue cose.

Altri suggerimenti

Prova questa funzione:

    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

Non hai menzionato la lingua che stai utilizzando. La funzione di SZL è scritta in VB. Dal momento che sto usando C # ho dovuto convertirlo. Ha funzionato alla grande. Ecco il codice C # equivalente.

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

    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top