Вызов макроса на конкретный лист / Excel - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу запустить макрос на определенном листе, в моем случае этот лист называется «Таблетка».

Если значение ячейки в «Tabelle1» изменяется, я хочу запустить этот макрос в »Таблетка "лист.

Код в моем Tabelle1:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$C$2" Then
        Call Delete_OptionB1
    End If
End Sub

Эта часть работает.

Макрос код:

Sub Delete_OptionB1()
'
' Delete_OptionB1 Makro
'
     With Worksheets("Tablet")
    .Range("M2:AD2").Select
     Selection.ClearContents
    End With
End Sub

Это не будет делатьработа.Любые предложения, как мне заставить это работать?

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

В вашем коде используется блок с

 With Worksheets("Tablet")
.Range("M2:AD2").Select
 Selection.ClearContents
End With

Вы выбираете .Range("M2:AD2").Select, но затем очищаете содержимое выделения на любом листе, который может быть активным, когда вы Delete_OptionB1.Изменить, чтобы включить.- .Selection.ClearContents.

Еще лучше, избавьтесь или от With...End With и Select в целом.Одна строка сделает все это:

Sub Delete_OptionB2()
'
' Delete_OptionB1 Makro
'
    Worksheets("Tablet").Range("M2:AD2").ClearContents
End Sub
0 голосов
/ 11 декабря 2018

Поместите это в область кода Tabelle1 листа :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("$C$2")) Is Nothing Then
        Application.EnableEvents = False
            Call Delete_OptionB1
        Application.EnableEvents = True
    End If
End Sub

Поместите это в стандартный модуль :

Sub Delete_OptionB1()
'
' Delete_OptionB1 Makro
'
     With Worksheets("Tablet")
        .Range("M2:AD2").ClearContents
    End With
End Sub
0 голосов
/ 11 декабря 2018

Вместо…

Target.Address = "$C$2"

… лучше использовать метод Application.Intersect , чтобы он работал, если Target больше одной ячейки (это может произойти при копировании /вставить диапазон):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Target.Parent.Range("C2")) Is Nothing Then
        Delete_OptionB1 'you don't need the Call statement
    End If
End Sub

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


Сделайте Delete_OptionB1 общедоступным и избегайтеиспользуя .Select и Selection. (также см. Как избежать использования Select в Excel VBA )

Public Sub Delete_OptionB1() 'make it public
    ThisWorkbook.Worksheets("Tablet").Range("M2:AD2").ClearContents
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...