У меня проблема с моей строкой подключения для подключения документа Excel к базе данных доступа.
Когда я запускаю это, появляется ошибка «Несоответствие типов». Но это касается только 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
Любая помощь будет принята с благодарностью.
1 ответ
Функция 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"
Похожие вопросы
Новые вопросы
excel
Только для вопросов по программированию для объектов или файлов Excel или для разработки сложных формул. Вы можете объединить тег Excel с VBA, VSTO, C #, VB.NET, PowerShell, OLE-автоматизацией и другими тегами и вопросами, связанными с программированием, если это применимо. Общая помощь по MS Excel для функций одного листа доступна в Super User.