运行时错误1004不能复制工作表从源到目标

真的这很好奇。 让我试着解释发生了什么事情。 我写了一个叫做excelfile的macros的macros

Set excel = CreateObject("excel.application") excel.Visible = True excel.workbooks.Open FileName:=tablePath IDcolumn = excel.Application.Run("main", generatedExelPath) 

从单词macros中调用的“main”函数是“简单地”通过从被调用的excel文件复制特定数据来生成一个新的excel文件。

所以我们得到了1个单词和2个excel文档。 一些excel1必须复制到excel2。

因此我使用:

 For i = 0 To UBound(copySheets) Windows(srcWinName).Activate Sheets(copySheets(i)).Activate Set AcSh = ActiveSheet Windows(destWinName).Activate If copySheets(i) = "config" Then AcSh.Copy Before:=Sheets(1) Else AcSh.Copy After:=ActiveSheet End If Next i 

copySheets包含需要复制的工作表。 但是复制命令会引发错误。 就像“无法从源文件复制到目标文件,导致目标文件的行数和列数less于源文件”

Atm excel1是一个xlsm因为它是一个xls文件,这个错误没有发生。 我想知道这个增加了excel2的行是否是prob

 Workbooks.Add Template:="Workbook" 

也许我应该使用另一个模板,但我不知道哪一个。

如果我创build一个空的xlsm文件,保存它,然后使用打开这个空的xlsm而不是错误不发生之前的命令。 希望可以有人帮帮我。

嗯,我应该提到的一件事是:如果我从单词macros运行macros如上所示,错误发生,但是当我closuresWord和手动执行Excelmacros的工作。

编辑:它的作品

Alain说,我只是改变了Excel的选项。 在这里他的职位。

哦,我知道这是为什么发生。 您必须更改您的默认Excel格式:Orb> Excel选项> |保存| >以这种格式保存文件:“Excel工作簿(.xlsx)”。 您当前的设置将是Excel 97-2003工作簿(.xls)。 – Alain 8月29日在12:09

.xls扩展名是Excel 2003工作簿格式。 这些仅支持65,536行和256列。

.xlsx.xlsb.xlsm是Excel 2007工作簿。 这些支持1,048,576行和16,384列。

发生此错误是因为您正在尝试将工作表从2007工作簿复制到2003年工作簿。 由于行数和列数的限制,即使您实际上没有使用所复制的工作表中所有这些额外的行和列,也无法完成此操作。

解决方法是将.xlsm工作簿保存为.xls文件,反之亦然,然后复制表单。 或者,不是复制整个工作表,而是将UsedRange从一个工作表复制到另一个工作表,但可能会丢失重要的格式,例如行高和列宽。


添加新工作簿将以默认保存格式创build工作簿。 您可以通过在VBA中强制使用默认的保存格式,然后将其更改回来,以避免让用户不高兴,从而确保将其设置为.xlsx文件:

 Dim prevSaveFormat As Long prevSaveFormat = Application.DefaultSaveFormat Application.DefaultSaveFormat = 51 'xlsx Workbooks.Add Application.DefaultSaveFormat = prevSaveFormat 

在XlFileFormat枚举中可以使用文件格式常量的完整列表,但这里是常见的:

  • 51 = xlOpenXMLWorkbook(2007-2010中没有macros, xlsx

  • 52 = xlOpenXMLWorkbookMacroEnabled(有或没有2007-2010年的macros, xlsm

  • 50 = xlExcel12(Excel 2007二进制工作簿在2007-2010有或没​​有macros, xlsb

  • 56 = xlExcel8(Excel 2007-2010中的97-2003格式, xls