Pregunta

Estoy escribiendo un complemento de Excel usando COM Interop desde .net. Tengo un comando que muestra un cuadro de diálogo y, desde el cuadro de diálogo, trabajo un poco, como recopilar datos del rango utilizado de varias hojas. El problema es que si una celda está en modo de edición, algunas de las llamadas que debo hacer arrojarán excepciones. Me gustaría una forma de determinar de antemano que Excel está en modo de edición, para que pueda advertir al usuario que termine de editar la celda primero.

¿Alguna idea?

¿Fue útil?

Solución

Existe una propiedad Application.Ready que debe proporcionarle esta información, pero en la práctica no funciona de manera confiable. Consulte aquí para encontrar un hackaround.

Es posible que también quieras ver la configuración de Application.Interactive = false mientras tu código .net está haciendo su trabajo.

Otros consejos

Pruebe esta función:

    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

No mencionaste qué idioma estás usando. La función de SZL está escrita en VB. Ya que estoy usando C # tuve que convertirlo. Funcionó muy bien Aquí está el código 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;
            }
        }

    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top