在特定工作表/ Excel上调用宏

时间:2018-12-11 13:15:14

标签: excel vba excel-2010

我想在特定工作表上运行宏,在我的情况下,该工作表称为“平板电脑”。

如果“ 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 :(得分:2)

在代码中使用with块

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

您正在选择.Range("M2:AD2").Select,但随后清除Delete_OptionB1时可能处于活动状态的工作表上的选择内容。更改为包含。 -.Selection.ClearContents

更好的是,摆脱掉或者With...End WithSelect一起摆脱。一行就可以完成所有操作:

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

答案 1 :(得分:0)

代替……

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 超过一个单元格,则最好使用Application.Intersect method使其起作用(在复制/粘贴范围时可能会发生这种情况):

Delete_OptionB1

如果Tablet.Delete_OptionB1不在公共模块中,而是在工作簿中,请使用Delete_OptionB1


.Select设为公开,并避免使用Selection.Public Sub Delete_OptionB1() 'make it public ThisWorkbook.Worksheets("Tablet").Range("M2:AD2").ClearContents End Sub (另请参见How to avoid using Select in Excel VBA

import re


data = [
    "word1 word2 0.1111 hyp1 hyp2 0.1111111111111111",
    "word3 word4 0.2 hyp3 hyp4 0.07692307692307693",
    "word5 word6 0.2 hyp5 hyp6 0.3333333333333333"]

pattern = r"^(\S+\s\S+\s\d+.\d+)\s(\S+\s\S+\s\d+.\d+)$"
pairs = []
for line in data:
    match = re.match(pattern, line)
    pairs.append(match.group(1).split())
    pairs.append(match.group(2).split())

for pair in pairs:
    print(pair)

print("======")

pairs.sort( key=lambda value: float(value[2]))

for pair in pairs:
    print(pair)

答案 2 :(得分:0)

将其放置在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