2014-02-05 5 views
1

Я разрабатываю надстройку Excel. мне нужно получить значение из A1 ячейки, поэтому я использую этот кодПолучить текущее значение Excel в сфокусированной ячейке

value = workbook.Worksheets[1].Range["A1:A1"].Value2; 

Это прекрасно работает, но если:
- предыдущее значение Клетка «1»
- Типы пользователей «2», но делает не нажмите Enter или Tab
- Пользователь активирует ленту, нажав его кнопку

Value2 получил от этого образца кода является «1» (предыдущее значение) не «2» (текущее значение, отображаемое в ячейке, но не подтверждено). В моей ситуации это неправильно, мне нужно «2».
Как я могу это исправить?


Я попытался принуждая выбор другой ячейки

Application.ActiveCell.Offset[1, 0].Select(); 

или

Application.ActiveSheet.Range["A2"].Select(); 

, но никоим образом .. "2" значение теряется.


Я также попытался получаю значение из текстового поля в панели инструментов («2» там показано), но не знаю, мотыги делать!

+0

пользователь может нажать на кнопку в вашем надстройку в режиме редактирования? –

+0

Что такое режим редактирования? В любой момент пользователь может щелкнуть мышью в надстройке, также если он редактирует ячейку. –

+1

Режим редактирования аналогичен нажатию 'F2' в ячейке Excel.В этом случае большая часть кнопки становится неактивной. –

ответ

1

Когда Excel в в режиме редактирования (Аналогично нажавF2в ячейке в Excel), большинство кнопок на ленте и редакторе VBA становится недоступным.

Сказав это, Может ли код VBA работать в режиме редактирования? Да, это возможно, как показано в THIS link

Чтобы ответить на ваш вопрос, вам придется использовать API для захвата ключа, а затем узнать, каково текущее значение ячейки. Поверьте мне, это не стоит боль.

Простая альтернатива:

Использование ExcelApp.Interactive для проверки режима редактирования в Excel. И если Excel находится в режиме редактирования, сообщите пользователю о выходе из ячейки и повторите попытку. Сделал быструю проверку в Интернете и нашел подобный пример HERE Смотрите раздел Правильное решение для всех версий Excel, 2000 - 2010

Этот код в vb.net, но может быть легко преобразован в C#

Function IsEditing() As Boolean 
    If ExcelApp.Interactive = False Then Return False 
    Try 
     ExcelApp.Interactive = False 
     ExcelApp.Interactive = True 
    Catch 
     Return True 
    End Try 
    Return False 
End Function 

C# код из чата

bool IsEditing() 
{ 
    if (Globals.ThisAddIn.Application.Interactive == false) 
     return false; 
     try 
     { 
      Globals.ThisAddIn.Application.Interactive = false; 
      Globals.ThisAddIn.Application.Interactive = true; 
      } 
       catch (Exception e) 
      { 
      return true; 
     } 
    return false; 
} 
+1

Я решил использовать Простую альтернативу. –

Смежные вопросы