Excel 2013 VBA 连接字符串类型不匹配

Excel 2013 VBA Connection String Type Mismatch

我在将 excel 文档连接到访问数据库时遇到连接字符串问题。

当我运行这个时出现'Type Mismatch'错误。但它只影响excel 2013,excel 365工作正常。

我已经将问题缩小到数据源,就好像我通过将数据库上移一些级别或设置驱动器路径来缩短驱动器一样,它也可以正常工作。但是我无法移动数据库或设置驱动器路径作为修复。

数据源路径只有 154 个字符。

Dim strTable As String, strDrive As String, strDriTab As String
Dim rngDes As Range


If .Range("b7").Value = "" Then
.Range("b4").Value = rngTbl.Value
.Range("b4").Font.Bold = True
.Range("b4").Font.Size = 12
Set rngDes = .Range("b7")
Else
Dim rngFormat As Range
Set rngFormat = .Range("b60000").End(xlUp).Offset(3, 0)
rngFormat = rngTbl.Value
rngFormat.Font.Bold = True
rngFormat.Font.Size = 12
Set rngDes = .Range("b60000").End(xlUp).Offset(3, 0)
End If

With ActiveSheet.QueryTables.Add(Connection:=Array( _
    "OLEDB;Provider:=Microsoft.ACE.OLEDB.12.0;Password:="""";User ID:=Admin;Data Source:=" & strDrive & strTable & ";Mode:=ReadWrite;Extended Properties" _
    , _
    ":="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path:="""";Jet OLEDB:Database Password:=""*******"";Jet OLEDB:Engine Type:=5;Jet OLEDB:Dat" _
    , _
    "abase Locking Mode:=0;Jet OLEDB:Global Partial Bulk Ops:=2;Jet OLEDB:Global Bulk Transactions:=1;Jet OLEDB:New Database Password:=""""" _
    , _
    ";Jet OLEDB:Create System Database:=False;Jet OLEDB:Encrypt Database:=False;Jet OLEDB:Don't Copy Locale on Compact:=False;Jet OLEDB:" _
    , "Compact Without Replica Repair:=False;Jet OLEDB:SFP:=False"), Destination:= _
    rngDes)

    .CommandType = xlCmdSql
    .CommandText = sql
    .Name = rngDes.Address
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .SourceDataFile = strDrive & strTable
    .Refresh BackgroundQuery:=False
End With

如有任何帮助,我们将不胜感激。

Array() 函数的每个元素限制为 255 个字符,这可能会导致您遇到问题,具体取决于 strDrivestrTable 参数的长度。幸运的是,这里没有必要 - 您应该将 Connection 参数作为简单的字符串值传递:

Connection:="OLEDB;Provider:=Microsoft.ACE.OLEDB.12.0;Password:="""";User ID:=Admin;Data Source:=" & strDrive & strTable & ";Mode:=ReadWrite;Extended Properties:="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path:="""";Jet OLEDB:Database Password:=""*******"";Jet OLEDB:Engine Type:=5;Jet OLEDB:Database Locking Mode:=0;Jet OLEDB:Global Partial Bulk Ops:=2;Jet OLEDB:Global Bulk Transactions:=1;Jet OLEDB:New Database Password:="""";Jet OLEDB:Create System Database:=False;Jet OLEDB:Encrypt Database:=False;Jet OLEDB:Don't Copy Locale on Compact:=False;Jet OLEDB:Compact Without Replica Repair:=False;Jet OLEDB:SFP:=False"