Переопределение событий листа Excel с использованием VBA - PullRequest
1 голос
/ 29 марта 2010

Мне нужно программно переопределить следующие события рабочего листа:

  • BeforeDoubleClick
  • SelectionChange
  • BeforeRightClick

Мне удалось переопределить событие OnActivate, используя следующий код:

sheet.OnSheetActivate = "MyOwn_Activate"


Private Sub MyOwn_Activate()

    myForm.Show

End Sub

Я реализовал BeforeDoubleClick по тем же строкам:

sheet.OnDoubleClick = "My_BeforeDoubleClick"

Private Sub My_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
...
End Sub

Тем не менее, 'аргумент не является обязательным' Ошибка генерируется во время выполнения, когда пользователь дважды щелкает ячейку на листе. Может кто-нибудь подсказать, пожалуйста, как передать параметры?

Кроме того, я не могу найти имена событий для SelectionChange и BeforeRightClick. Я попробовал:

sheet.BeforeRightClick = "My_BeforeRightClick"
sheet.SelectionChange = "My_SelectionChange"

Но обе вышеуказанные строки не работают.

Любая помощь / предложение приветствуется.

Спасибо:)

Ответы [ 2 ]

1 голос
/ 29 марта 2010

Это можно сделать, нацелив событие на уровень рабочего листа, вставив собственный код, а затем отменив исходное событие.

Этот код должен попасть в объект листа в области Project Explorer для листа, на который вы нацеливаетесь.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

MsgBox "Double click"
''//Your override code

''//Continue with Double click action
''//OR optionally cancel the double click event

Cancel = True

End Sub

Два других события, на которые вы хотели бы нацелиться:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub

они могут использоваться в одном и том же месте.

1 голос
/ 29 марта 2010

Это невозможно.

Вы можете связать метод таким способом, только для 3 событий (OnSave, OnSheetActivate, OnSheetDeactivate). Пожалуйста, обратитесь: http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook_members%28v=VS.80%29.aspx

EDIT

Dim beforeRightClick As String

Public Sub newBeforeRightC(ByVal Target As Range, Cancel As Boolean)
    MsgBox Target.Address
    beforeRightClick = "newTwoBeforeRightC"
    Cancel = True
End Sub

Public Sub newTwoBeforeRightC(ByVal Target As Range, Cancel As Boolean)
    MsgBox Target.Address & "-" & 2
    Cancel = True
End Sub

Private Sub Worksheet_Activate()
    beforeRightClick = "newBeforeRightC"
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    CallByName Me, beforeRightClick, VbMethod, Target, Cancel
End Sub

Этот код является частью Sheet1 (т. Е. Экземпляра класса рабочей книги) внутри VBA.

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