2008-10-21 8 views
2

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

Любые идеи?

ответ

7

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

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

+0

Хоббо, это было именно то, что мне нужно. Благодаря! – 2008-10-22 11:42:18

3

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

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 
0

Вы не упоминаете, какой язык вы используете. SZL's function написан на 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; 
      } 
     } 

    }