transferpreadsheet范围错误:3011卡在列“IV”

时间:2017-03-11 08:19:45

标签: excel vba ms-access

我使用以下函数导出列以访问DB。它对“IV”之前的所有列都非常有效,但对“IV”列中和之后的所有范围都给出了错误。我的工作表名称为“Perm-1”,范围为IV3:IV4,如下例所示。无法在Google或Microsoft文档中找到任何内容。任何人遇到类似的错误,如果你能解决它,请告诉我。

Public Sub Excel_Access_Export(accDB As Access.Application, tblName As String)

accDB.DoCmd.TransferSpreadsheet _
        TransferType:=acImport, _
        SpreadSheetType:=acSpreadsheetTypeExcel12, _
        TableName:=tblName, _
        Filename:=Application.ActiveWorkbook.FullName, _
        HasFieldNames:=True, _
        Range:="Perm-1$IV3:IV4"
End Sub

编辑::错误消息:“MS Access找不到对象'Perm-1 $ IV3:IV4'。确保对象存在并正确拼写其名称。如果这不是本地对象,请检查您的网络连接或联系服务器管理“

1 个答案:

答案 0 :(得分:4)

第IV列是第256列。访问2007-2010的限制为255列。 Transferspreadsheet共享这些列限制,但(可能更重要的是,事实证明)也受到过时的excel对象模型(256列和65536行)的限制。

以下是一些解决列问题的示例代码。 (您可以以相同的方式处理行限制 - 将其复制到第1行到第65536行并导入最多65535行的块。)我添加了一个新工作表," Staging"这只是一张空白纸,暂时保存你要转移的东西。对于这个例子,我只传输一列。

可能有更好的解决方法,但就目前而言,这是一个POC。是的,我正在使用"这本工作书"转移正在使用" activeworkbook"。

Sub test()
    Dim accDB As Access.Application

    Set accDB = New Access.Application
    accDB.Application.Visible = True
    accDB.OpenCurrentDatabase "C:\Bench\Database11.accdb", True
    Call Excel_Access_Export(accDB, "Table1", 257)
End Sub

Public Sub Excel_Access_Export(accDB As Access.Application, tblName As String, col As Long)
    With ThisWorkbook.Sheets("Staging").Columns(1)
        .ClearContents
        .Value = thisWorkbook.Sheets("Perm-1").Columns(col).Value
    End With
    accDB.DoCmd.TransferSpreadsheet _
        TransferType:=acImport, SpreadSheetType:=acSpreadsheetTypeExcel12, _
        TableName:=tblName, Filename:=Application.ActiveWorkbook.FullName, _
        HasFieldNames:=True, Range:="Staging$A3:A4"
End Sub