将工作表复制到另一个工作簿

时间:2019-12-06 16:30:07

标签: excel vba copy

这是相对简单的,但是它不起作用,我似乎找不到任何有关此操作的方法。

我的模块中有一个带有以下代码的子例程:

Set wkbGraph_Generator = ActiveWorkbook

然后在另一个模块中,我有了这个全局变量。

Public wkbCompiledDataTable As New Collection

然后在另一个模块中,我有一个子程序具有以下内容:

wkbCompiledDataTable.Add Workbooks.Open(FileName:=FilePath, ReadOnly:=True, IgnoreReadOnlyRecommended:=True)

然后我要执行一个函数,这就是我遇到麻烦的地方:

Function RTFN_GetDataActual(wkbCompiledDataTable As Collection, _
                        wkbGraph_Generator As Workbook)

wkbCompiledDataTable(1).Sheets(1).Copy After:=wkbGraph_Generator.Sheets(Sheets.Count)
wkbGraph_Generator.Sheets(Sheets.Count).Name = TagArray(1)

End Function

我遇到错误运行时错误'9':下标超出范围

我不知道如何描述它……但是有时如果我一步步通过它却无法正常工作……我认为它在“ Sheets.Count”中,因为有时sheets.count = 3这是不对的。其他时候,sheets.count是正确的。我认为当工作在sheets.count上时,重点是放在错误的工作表上。好的,是的,我很确定这就是问题所在。该代码只是在该行上有一个错误...然后我单击了“ wkbGraph_Generator”以将其有效激活...并且该代码起作用了...我该如何解决呢?

2 个答案:

答案 0 :(得分:0)

好吧。。。昨晚这很挣扎...基本上在发布问题时想出了我自己的答案。

更改:

wkbCompiledDataTable(1).Sheets(1).Copy After:=wkbGraph_Generator.Sheets(Sheets.Count)

收件人:

wkbCompiledDataTable(1).Sheets(1).Copy After:=wkbGraph_Generator.Sheets(wkbGraph_Generator.Sheets.Count)

PS:在线上到处都只显示“ Sheets.Count”,用于将工作表从一个工作簿复制到另一个工作簿...根据我发现的结果,看来这是行不通的。

答案 1 :(得分:0)

Sheets.Count具有隐式ActiveWorkbook明确-指定工作簿。 With语句是执行此操作的好方法。请注意.的所有实例之前的Sheets,包括.Sheets.Count

Function RTFN_GetDataActual(wkbCompiledDataTable As Collection, _
                        wkbGraph_Generator As Workbook)

    With wkbGraph_Generator
        wkbCompiledDataTable(1).Sheets(1).Copy After:=.Sheets(.Sheets.Count)
        .Sheets(.Sheets.Count).Name = TagArray(1)
    End With

End Function