Проверьте, является ли конкретный лист активным листом - PullRequest
2 голосов
/ 22 сентября 2011

Как проверить, является ли конкретный лист активным или нет?

Я хочу, чтобы для листа с именем Данные .

использовались определенные функции

Я могу проверить, существует ли спецификация или нет, используя следующий код

Dim ws As Worksheet
Set ws = Wb.Sheets("Data")
If ws Is Nothing Then

Else

Но как проверить, является ли Лист данных активным или нет? есть ли что-то вроде

If ws Is Activesheet Then

UPDATE:

Я добавил следующий код в один из модулей класса addin.

Я пытаюсь управлять другими листами Excel из этого дополнения. Я хочу вызвать процедуру paste_cells, если активный лист имеет имя «Данные».

Public WithEvents App As Application

Private Sub App_WorkbookActivate(ByVal Wb As Workbook)
MsgBox "Activate"

Dim ws As Worksheet
Set ws = Wb.Sheets("Data")

If ws Is ActiveSheet Then  ' if active sheet is having name Data
App.OnKey "^v", Procedure:="Paste_cell" 'paste cell is procedure i want to add when active sheet is Data
Else
App.OnKey "^v"
End If

End Sub

Ответы [ 3 ]

4 голосов
/ 22 сентября 2011

Вы также можете проверить объекты (мы никогда не узнаем, открыл ли пользователь рабочую книгу с таким же именем):

Sub test()
  On Error Resume Next
  If ActiveWorkbook.Worksheets("Data") Is ActiveSheet Then MsgBox ("ok")
  On Error GoTo 0
End Sub

См. MSDN

Спасибо brettdj за напоминание об обработке ошибок.

[EDIT] В вашем коде:

Public WithEvents App As Application

Private Sub App_WorkbookActivate(ByVal Wb As Workbook)
MsgBox "Activate"

Dim ws As Worksheet
On Error Resume Next
Set ws = Wb.Sheets("Data")
On Error GoTo 0

If Not ws Is Nothing and ws Is ActiveSheet Then  ' if active sheet is having name Data
  App.OnKey "^v", Procedure:="Paste_cell" 'paste cell is procedure i want to add when active sheet is Data
Else
  App.OnKey "^v"
End If
End Sub
2 голосов
/ 22 сентября 2011

вам следует

  1. использовать обработку ошибок, поскольку лист может не существовать
  2. Для надстройки вы обычно используете ActiveWorkbook, т.е.

     Dim ws As Worksheet
     On Error Resume Next
     Set ws = ActiveWorkbook.Sheets("Data")
     On Error GoTo 0
     If ws Is Nothing Then
         MsgBox "Data sheet not found"
     Else
         If ws.Name = ActiveWorkbook.ActiveSheet.Name Then
             MsgBox "Data sheet found and is active"
         Else
             MsgBox "Data sheet found but is inactive"
         End If
     End If
    
1 голос
/ 22 сентября 2011

Я бы использовал:

If Wb.ActiveSheet.Name = ws.Name Then

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