VBA - 哪个表称为宏,然后做一些事情

时间:2018-04-25 20:32:38

标签: excel excel-vba vba

除了Activesheet.Name之外还有另一种方法可以让哪个工作表调用宏吗?

我目前有代码,按下按钮然后运行模拟程序,然后运行程序后,它会转到工作簿中的另一个工作表并粘贴信息。

如果我在每张纸上一次运行一个宏,但是我希望能够同时运行它们,这是有效的。

实施例: 我有一个包含按钮的输入表“Run1”,然后在模拟完成后,它会在名为“Results1”的工作表中执行某些操作

我创建了“Run1”和“Results1”的重复工作表,并在最后增加了数字

If ActiveSheet.Name = "Run1" Then
    t = 1
End If
If ActiveSheet.Name = "Run2" Then
    t = 2
End If
If ActiveSheet.Name = "Run3" Then
    t = 3
End If

If ActiveSheet.Name = "Run4" Then
    t = 4
End If

If ActiveSheet.Name = "Run5" Then
    t = 5
End If

If ActiveSheet.Name = "Run6" Then
    t = 6
End If

Worksheets("Results" & t).Activate

For Each A In ActiveSheet.ChartObjects("Chart 9").Chart.SeriesCollection
    A.Delete
Next A

如果我同时单击所有按钮,则会抛出错误,因为它尝试根据用户当前所在的“运行”表单转到“结果”表。并且由于模拟程序正在运行,代码没有同步完成,excel无法找到第一个按钮宏正在调用的结果表,因为它没有激活。

1 个答案:

答案 0 :(得分:2)

首先阅读此链接并调整代码以删除所有不需要的选择/激活操作: How to avoid using Select in Excel VBA

然后你可以这样做:

If ActiveSheet.Name Like "Run*" Then
    With Worksheets("Results" & Replace(ActiveSheet.Name, "Run", ""))
        '? all your charts are called "Chart 9"?
        For Each A In .ChartObjects("Chart 9").Chart.SeriesCollection
            A.Delete
        Next A
        .Activate
    End With
End If