在特定 sheet / Excel 上调用宏
Call Macro on a specific sheet / Excel
我想要 运行 特定 sheet 上的宏,在我的例子中 sheet 被称为 "Tablet"。
如果 "Tabelle1" 中的单元格值发生变化,我想 运行 "Tablet" sheet 中的此宏。
我的 Tabelle1 中的代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C" 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
这行不通。有什么关于我如何让它工作的建议吗?
而不是……
Target.Address = "$C"
... 如果 Target
不止一个单元格,最好使用 Application.Intersect method 使其工作(当您 copy/paste 一个范围时可能会发生这种情况):
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
不在 public 模块中而是在工作簿中,请使用例如 Tablet.Delete_OptionB1
使Delete_OptionB1
public,并避免使用.Select
和Selection.
(另见How to avoid using Select in Excel VBA)
Public Sub Delete_OptionB1() 'make it public
ThisWorkbook.Worksheets("Tablet").Range("M2:AD2").ClearContents
End Sub
在您的代码中使用 with 块
With Worksheets("Tablet")
.Range("M2:AD2").Select
Selection.ClearContents
End With
您正在选择 .Range("M2:AD2").Select
,但随后在 Delete_OptionB1
时清除了 sheet 可能处于活动状态的选择内容。更改以包含一个 . - .Selection.ClearContents
.
更好的是,完全摆脱 With...End With
和 Select
。一行即可完成所有工作:
Sub Delete_OptionB2()
'
' Delete_OptionB1 Makro
'
Worksheets("Tablet").Range("M2:AD2").ClearContents
End Sub
将其放在 Tabelle1
工作表代码区域:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("$C")) 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
我想要 运行 特定 sheet 上的宏,在我的例子中 sheet 被称为 "Tablet"。
如果 "Tabelle1" 中的单元格值发生变化,我想 运行 "Tablet" sheet 中的此宏。
我的 Tabelle1 中的代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C" 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
这行不通。有什么关于我如何让它工作的建议吗?
而不是……
Target.Address = "$C"
... 如果 Target
不止一个单元格,最好使用 Application.Intersect method 使其工作(当您 copy/paste 一个范围时可能会发生这种情况):
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
不在 public 模块中而是在工作簿中,请使用例如 Tablet.Delete_OptionB1
使Delete_OptionB1
public,并避免使用.Select
和Selection.
(另见How to avoid using Select in Excel VBA)
Public Sub Delete_OptionB1() 'make it public
ThisWorkbook.Worksheets("Tablet").Range("M2:AD2").ClearContents
End Sub
在您的代码中使用 with 块
With Worksheets("Tablet")
.Range("M2:AD2").Select
Selection.ClearContents
End With
您正在选择 .Range("M2:AD2").Select
,但随后在 Delete_OptionB1
时清除了 sheet 可能处于活动状态的选择内容。更改以包含一个 . - .Selection.ClearContents
.
更好的是,完全摆脱 With...End With
和 Select
。一行即可完成所有工作:
Sub Delete_OptionB2()
'
' Delete_OptionB1 Makro
'
Worksheets("Tablet").Range("M2:AD2").ClearContents
End Sub
将其放在 Tabelle1
工作表代码区域:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("$C")) 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