首页 > 解决方案 > 在这个 Excel VBA 中,有人能告诉我为什么它拒绝在工作表对象的 add 方法中使用 after 参数吗?

问题描述

代码是:

Sub Copy_Filtered_Table()
    Dim aSheet As Worksheet
    Dim i As Long
    i = ActiveSheet.Index
    ActiveSheet.AutoFilter.Range.Copy
->  Set aSheet = ActiveWorkbook.Worksheets.Add(After:=i)
    aSheet.Range("A1").PasteSpecial
End Sub

工作簿格式是 .xlsm Excel 2016 它在活动工作表之后和之前都有工作表

我也试过用这样的 aSheet 变量来做

      ActiveWorkbook.Worksheets.Add After:=i

它也没有用。这两种情况都会给出错误 1004 对象“表”的方法“添加”失败。如果我省略了 After 参数,它可以工作,但是将结果新工作表放在我正在避免的活动工作表之前。

标签: excelvba

解决方案


为了相对于现有工作表插入,您需要使用以下之一提供实际工作而不是其索引:

Set aSheet = ActiveWorkbook.Sheets.Add(After:=ActiveWorkbook.Worksheets(i))
ActiveWorkbook.Sheets.Add After:=ActiveWorkbook.Worksheets(i)

您选择哪一个取决于您是否立即想对工作表做某事而不再次搜索,但我怀疑您已经知道了,考虑到您的问题。


顺便说一句(尽管我没有尝试过),我怀疑获取当前工作表的索引然后将其转回当前工作表对象有点不必要。您可能只想尝试:

Set aSheet = ActiveWorkbook.Sheets.Add(After:=ActiveWorkbook.ActiveSheet)

推荐阅读