我想对所有包含在一个Excel工作簿中的表格运行SQL查询,我的VBA代码使用ADODB来运行这些SQL查询。我的VBA代码使用ADODB来运行这些SQL查询。
当工作簿保存在 OneDrive 中时,打开连接失败,但当工作簿保存到本地驱动器时,打开连接成功。
我如何在单个excel工作簿中的表上运行SQL,同时保存在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'的方法'Open'失败。
谢谢!我想对所有包含在一个Excel工作簿中的表格运行SQL查询。
用""代替htpps:。这将使你更进一步。