Pergunta

Eu estou escrevendo um suplemento do Excel usando interoperabilidade do .net. Eu tenho um comando que mostra uma janela, e na caixa de diálogo que fazer algum trabalho como a coleta de dados do intervalo usado de várias folhas. O problema é que se uma célula está em modo de edição, algumas das chamadas que eu preciso fazer vai lançar exceções. Eu gostaria de ter uma maneira de determinar de antemão que o Excel está em modo de edição, para que eu possa avisar o usuário para concluir a edição da célula em primeiro lugar.

Todas as idéias?

Foi útil?

Solução

Não é uma propriedade Application.Ready que é suposto dar-lhe essa informação, mas na prática isso não funciona de forma confiável. Consulte aqui para uma hackaround.

Você também pode querer olhar para a criação Application.Interactive = false enquanto seu código .net está fazendo suas coisas.

Outras dicas

Tente esta função:

    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

Você não mencionou qual a linguagem que você está usando. função do SZL é escrito em VB. Desde que eu estou usando C # eu tinha para convertê-lo. Funcionou muito bem. Aqui está o código equivalente C #.

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

    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top