Я хотел бы запускать SQL-запросы для таблиц, содержащихся в одной книге Excel. Мой код VBA использует ADODB для выполнения этих запросов SQL.
Не удается открыть соединение при сохранении книги в OneDrive, но работает при сохранении книги на локальном диске.
Как запустить SQL для таблиц в одной книге Excel, сохраняя при этом в OneDrive?
Код работает, когда книга сохраняется локально, но не в OneDrive. Единственное изменение - путь к файлу, который в каждом случае выглядит довольно по-разному:
OneDrivePathExample = "https://d.docs.live.net/....xlsb"
LocalPathExample = "C:\My Documents\....xlsb"
Я экспериментировал с несколькими вещами относительно пути к файлу в строке подключения, но, что неудивительно, они не работали:
Оригинал
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=https://d.docs.live.net/.../Documents/Financial Tracker.xlsb;Extended Properties="Excel 12.0;HDR=Yes;IMEX=1";
Замена "/" на "\"
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=https:\\d.docs.live.net\...\Documents\Financial Tracker.xlsb;Extended Properties="Excel 12.0;HDR=Yes;IMEX=1";`
Добавление квадратных скобок вокруг пути
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[https://d.docs.live.net/.../Documents/Financial Tracker.xlsb];Extended Properties="Excel 12.0;HDR=Yes;IMEX=1";
Добавление кавычек вокруг пути
Provider=Microsoft.ACE.OLEDB.12.0;Data Source="https://d.docs.live.net/.../Documents/Financial Tracker.xlsb";Extended Properties="Excel 12.0;HDR=Yes;IMEX=1";
Я понимаю, что могу избежать этого, сохранив его локально при запуске этого кода, а затем сохранить его обратно в OneDrive, но я бы хотел избежать этого, если это возможно.
Я также понимаю, что могу написать код VBA, который делает то, что я пытаюсь сделать с SQL, однако я сделал это первоначально, но переключился на метод SQL, потому что SQL был намного быстрее.
Вот мой код:
Function OpenRST(strSQL As String) As ADODB.Recordset
''Returns an open recordset object
Dim cn As ADODB.Connection
Dim strProvider As String, strExtendedProperties As String
Dim strFile As String, strCon As String
strFile = ThisWorkbook.FullName
strProvider = "Microsoft.ACE.OLEDB.12.0"
strExtendedProperties = """Excel 12.0;HDR=Yes;IMEX=1"";"
strCon = "Provider=" & strProvider & _
";Data Source=" & strFile & _
";Extended Properties=" & strExtendedProperties
Set cn = CreateObject("ADODB.Connection")
Set OpenRST = CreateObject("ADODB.Recordset")
cn.Open strCon ''This is where it fails
OpenRST.Open strSQL, cn
End Function
В строке cn.Open strCon
появляется следующая ошибка:
Ошибка времени выполнения '-2147467259 (80004005)';
Сбой метода «Открыть» объекта «_Connection»
Спасибо!