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

Excel 2013 VBA连接字符串类型不匹配,excel,vba,type-mismatch,Excel,Vba,Type Mismatch,将excel文档连接到access数据库时,我的连接字符串出现问题 运行此操作时出现“类型不匹配”错误。但它只影响excel 2013,excel 365工作正常 我已经将问题缩小到数据源,好像我通过将数据库向上移动一些级别或设置驱动器路径来缩短驱动器,那么它也可以正常工作。但是,我无法移动数据库或将驱动器路径设置为修复 数据源路径仅为154个字符 Dim strTable As String, strDrive As String, strDriTab As String Dim rngDes

将excel文档连接到access数据库时,我的连接字符串出现问题

运行此操作时出现“类型不匹配”错误。但它只影响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个字符,根据
strDrive
strTable
参数的长度,这可能会导致您的问题。幸运的是,这里不需要它-您只需将
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"

strDrive
strTable
中似乎没有任何值。我还建议您去掉
Array()
,将
连接
参数作为一个字符串传递。您好,出于安全原因,我特意避免添加这些值。但他们是正确的。我尝试过不使用数组,它似乎可以工作。我正在做更多的测试,我会让你知道结果的。嗨,罗瑞,成功了,我真不敢相信会那么容易。请添加您的建议作为答案,我将正确地标记它。