我使用以下函数导出列以访问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'。确保对象存在并正确拼写其名称。如果这不是本地对象,请检查您的网络连接或联系服务器管理“
答案 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