5

这真的很好奇。让我试着解释发生了什么。我用word写了一个宏,它调用了一个excelfile的宏

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

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

所以我们得到了 1 个 word 和 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使用 open this empty而不是命令。xlsm希望可以有人帮帮我。

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

编辑:它有效

正如 Alain 所说,我刚刚更改了 excel 选项。这里是他的帖子。

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

4

1 回答 1

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

于 2012-08-28T15:15:48.177 回答