在 VBA 中,我试图将 WebQuery 用于我正在编写的检索财务数据的工具。
我使用与此类似的代码创建了一个 WebQuery:
url = "URL;http://my.url.com/"
With Worksheets("Sheet1").QueryTables.Add(Connection:=url, Destination:=Worksheets("Sheet1").Range("A1"))
.PostText = "Param1=Foo&Param2=Bar"
.Name = "My Query"
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 1
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
我遇到的问题是my.url.com需要基本身份验证用户名和密码。
如果我只是运行此代码,我会收到运行时错误 1004;它不会提示输入身份验证凭据。
但是,如果我进入 Excel“数据”功能区,选择“来自 Web”,然后在他们的迷你 Web 浏览器中访问http://my.url.com/ ,系统会提示我输入用户名和密码。
关闭此窗口然后重新运行我的 VBA 代码而不更改任何内容后,查询就可以工作了。但是在关闭 Excel 并重新运行时,它会再次失败,除非我通过这个极其丑陋的手动身份验证步骤。即使我告诉 Internet Explorer 永久保存这些凭据。
如何让 VBA 以编程方式使用基本身份验证对WebQuery进行身份验证,这样我就不需要采取这个额外的步骤?
(编辑:不管 WebQuery 是如何启动的,要么这个,要么 Excel 中是否有一个设置来强制这个提示发生?)
我在 Windows 7 上使用 Excel 2010(32 位),但我的目标用户可能正在使用各种 Excel 版本(都在 Windows 上)。