错误1004 VBA将Excel 4.0工作表复制到Excel 2010

错误1004 VBA将Excel 4.0工作表复制到Excel 2010,excel,ms-access,vba,Excel,Ms Access,Vba,我已经编写了一些托管在Access 2010中的VBA代码来清理包含不需要的自动运行宏的Excel 4.0工作簿-因为我只对数据感兴趣,所以最好将特定工作表复制到新的Excel 2010工作簿中 但是,当VBA到达.Copy语句时,我得到错误1004,对象“\u工作表”的方法“Copy”失败 这不是多个副本的MS错误,也不是复制前不保存的错误,等等。这是试图复制到现有工作簿中,虽然此错误代码在这里很流行,但我找不到适合我的方法和/或答案 代码中有问题的部分是: 'declarations Dim

我已经编写了一些托管在Access 2010中的VBA代码来清理包含不需要的自动运行宏的Excel 4.0工作簿-因为我只对数据感兴趣,所以最好将特定工作表复制到新的Excel 2010工作簿中

但是,当VBA到达.Copy语句时,我得到错误1004,对象“\u工作表”的方法“Copy”失败

这不是多个副本的MS错误,也不是复制前不保存的错误,等等。这是试图复制到现有工作簿中,虽然此错误代码在这里很流行,但我找不到适合我的方法和/或答案

代码中有问题的部分是:

'declarations
Dim varFile As Variant
Dim varNewFile As Variant
Dim xlApp As Excel.Application
Dim xlWbk As Excel.Workbook
Dim xlWb2 As Excel.Workbook
Dim xlSht As Excel.Worksheet
Dim xlSh2 As Object 'will be a member of the Sheets collection (not worksheets)

'filenames - constPath is a constant defining the pathname to the folder
varFile = constPath & "\site.xls"
varNewFile = constPath & "\sitenew.xlsx"

'create instance of Excel, open source workbook and point to worksheet
Set xlApp = CreateObject("Excel.Application")
Set xlWbk = GetObject(varFile)
Set xlSht = xlWbk.Worksheets("sites")

'open destination workbook (already exists)
Set xlWb2 = GetObject(varNewFile)

    'rename worksheet with same name
    For Each xlSh2 In xlWb2.Sheets
        If xlSh2.Name = "sites" Then
            xlSh2.Name = "sitesOLD"
        End If
    Next xlSh2

'this next statement is where it fails
    'copy across worksheet into existing workbook
    xlSht.Copy Before:=xlWb2.Sheets(1)

我已经检查了源数据,在长度、名称和地址信息以及一些是/否指示器方面,单元格值似乎没有问题。

原因可能有很多。放xlApp.xlSht.Copy行吗?

添加此行-xlSht.Activate,然后再复制。希望这能解决你的问题。激活不会有什么不同。我也尝试过复制到一个新的工作簿,所以我认为这里的问题是源工作簿或工作表。如果我手动尝试,一切都会正常…尝试xlWk.Activate-before-copyingt这不正常-但这是因为xlSht不是xlApp的有效成员。我已经确认xlWbk和xlWb2都在xlApp中,但要引用它们,请参见xlApp.Workbooks.Item1。不过,在引用对象时显式表示是一个好主意,所以我将进一步研究它。谢谢,明白了。那么,我认为xlApp.ActiveSheet.Copy可能会起作用。不幸的是不能。我现在重新编写了这一部分,以便它自己清理,然后执行“另存为”以输出为无宏Excel 2010工作簿。这有点混乱,但它解决了这个问题。