运行时错误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 )