运行时错误1004无法从源到dest复制表

时间:2012-08-28 08:30:48

标签: excel vba excel-vba

真的很奇怪。 让我试着解释发生了什么。 我在word中写了一个宏调用了一个excelfile的宏

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

从单词宏调用的“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包含需要复制的工作表。 但是复制命令会引发错误。像“无法从源复制到目标导致目标的行和列少于源文件”

Atm excel1是xlsm,因为它是xls文件,但未发生此错误。 我想知道这行加上excel2是否是问题

Workbooks.Add Template:="Workbook"

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

如果我创建一个空的xlsm文件,请将其保存,然后使用打开此空xlsm代替 错误发生之前的命令。希望有人可以帮助我。

啊,我应该提到的一件事是:如果我从字宏中运行如上所述的excel宏,则会发生错误但是 当我关闭Word并手动执行excel宏时,它可以工作。

编辑:它有效

我刚刚改变了excel-options,Alain说。在这里他的帖子。

  

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

1 个答案:

答案 0 :(得分:3)

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

.xlsx.xlsb.xlsm是Excel 2007工作簿。它们最多支持1,048,576行和16,384列。

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

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


添加新工作簿将以默认保存格式创建工作簿。您可以通过在VBA中强制使用默认保存格式然后将其更改回以便不会让用户感到不安来确保将其逐步设置为.xlsx文件:

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

XlFileFormat Enumeration提供了完整的文件格式常量列表,但以下是常见的:

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

  • 52 = xlOpenXMLWorkbookMacroEnabled(有或没有宏) 2007-2010, xlsm

  • 50 = xlExcel12(2007-2010的Excel二进制工作簿,有或没有 宏观, xlsb

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