SheetBeforeDoubleClick из COM Addin

Я пытаюсь написать COM-аддон для Excel XP на C #, который отключает двойной щелчок по ячейке для его редактирования.

Я хочу всплывать окно, в котором говорится, что редактирование ячейки таким образом запрещено, а затем прекращает выполнение.

Просматривая документацию в Microsoft, это кажется очень простой задачей, вы создаете приложение AppEvents_SheetBeforeDoubleClickEventHandler с AppEvents_SheetBeforeDoubleClickEventHandler func(object sheet, Range Target, ref bool Cancel) и вы устанавливаете Cancel на true, чтобы выполнение прекращалось.

У меня есть следующее:

 public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom) { Excel.Application app = application as Excel.Application; app.SheetBeforeDoubleClick += Excel.AppEvents_SheetBeforeDoubleClickEventHandler(beforeDoubleClick); } void beforeDoubleClick(object sheet, Excel.Range Target, ref bool Cancel) { MessageBox.Show("Cannot edit cells this way sorry."); Cancel = true; } 

Отображается окно сообщения, но ячейка затем помещается в режим редактирования, однако, если у меня есть то же самое из VBA, он работает.

То же самое происходит с добавлением VB.NET, используя следующий код.

 Private WithEvents app As Excel.Application Public Sub OnConnection(ByVal application As Object, ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnConnection app = application End Sub Sub Worksheet1_BeforeDoubleClick(ByVal obj As Object, ByVal Target As Excel.Range, ByRef Cancel As Boolean) Handles app.SheetBeforeDoubleClick MsgBox("Double-clicking in this sheet is not allowed.") Cancel = True End Sub 

У меня не было проблем с выполнением кода: «Отменить» не удалось выполнить операцию двойного щелчка.

Некоторые поисковые запросы появились из MSKB: BUG: Отменить параметр для событий Office игнорируется в Visual Studio .NET 2003 .

Такое поведение игнорирования параметра отмены, похоже, существует для версий Excel 2002 и ниже при использовании .NET-кода, созданного с использованием Visual Studio .NET 2003 (.NET Framework 1.1).

В статье приведена сложная работа, в которую входит ручная настройка сборки Interop. Это выглядит довольно выполнимо, хотя, если приложить немало усилий.

Было бы проще перейти на VS 2005 или VS 2008. Я скомпилировал свой код с помощью VS 2008, ориентированного на .NET 3.5, и запустил мой код в Excel 2007.

Кстати, пользователь сможет ввести значение, введя в панель формул, выполнив команду «Копировать-Вставить» или тому подобное. Чтобы запретить пользователю вводить значение, вы можете защитить рабочий лист.

  • Компонента Excel через powershell
  • Работа с несколькими рабочими книгами excel в python
  • Открыть Excel без COM
  • Скопируйте таблицу Excel в PowerPoint через VBA и сохраните
  • Как скрыть столбец Excel?
  • Правильный способ определить, был ли Excel закрыт и соответствующим образом реагировать?
  • Как получить окно или обработчик процесса определенного процесса Excel?
  • Добавление текстового поля Excel с помощью win32com
  • В Excel VSTO, как я могу проверить, принадлежит ли лист закрытой книге?
  • Получение координат объекта ExcelRange
  • Нужно найти начальную и конечную точки диапазона Excel в C #
  • Давайте будем гением компьютера.