Как определить, находится ли приложение Excel в режиме редактирования ячеек? - PullRequest
2 голосов
/ 21 октября 2008

Я пишу надстройку Excel, используя COM Interop из .net. У меня есть команда, которая открывает диалоговое окно, и из этого диалога я выполняю некоторую работу, например, собираю данные из используемого диапазона нескольких листов. Проблема в том, что если ячейка находится в режиме редактирования, некоторые вызовы, которые мне нужно сделать, будут вызывать исключения. Я хотел бы заранее определить, что Excel находится в режиме редактирования, чтобы я мог предупредить пользователя, чтобы он сначала закончил редактирование ячейки.

Есть идеи?

Ответы [ 3 ]

8 голосов
/ 21 октября 2008

Существует свойство Application.Ready, которое должно предоставлять вам эту информацию, но на практике оно не работает надежно. См. здесь для взлома.

Возможно, вы захотите посмотреть на настройку Application.Interactive = false, пока ваш код .net делает свое дело.

4 голосов
/ 31 июля 2014

Попробуйте эту функцию:

    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
1 голос
/ 03 августа 2017

Вы не упомянули, какой язык вы используете. Функция SZL записана в VB. Так как я использую C #, мне пришлось конвертировать его. Работал отлично. Вот эквивалентный код 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;
            }
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...