mwo*_*e02 10 vba download access-vba
我已经找到了很多用几种语言来做这个的例子,但没有一个是VBA特有的.这个问题,如何使用进度条下载VB6中的多个文件?,解决了在VB6中执行此操作的三种不同方法.
这些方法都不适合我,因为:
上面的2号似乎是最有希望的.我想知道我是否可以在我的VBA项目中使用类模块创建IBindStatusCallback接口?
或者可能使用上面的数字3提供可用于提供当前进度的属性/方法.任何帮助深表感谢.
我已经使用 wininet.dll 函数完成了此操作。不幸的是,我无法粘贴我的代码,因为它归我的雇主所有。
使用 InternetOpen 和 InternetOpenUrl 开始下载,HttpQueryInfoLong 获取内容长度,然后重复调用 InternetReadFile 将数据读入缓冲区(我使用 128k 缓冲区),将数据写入文件并随时更新进度条。
帮助您入门的声明:
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function HttpQueryInfo Lib "wininet.dll" Alias "HttpQueryInfoA" (ByVal hHttpRequest As Long, ByVal lInfoLevel As Long, ByRef sBuffer As Any, ByRef lBufferLength As Long, ByRef lIndex As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByRef Buffer As Any, ByVal lNumberOfBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternet As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Private Const INTERNET_FLAG_RELOAD = &H80000000
Private Const INTERNET_FLAG_KEEP_CONNECTION = &H400000 ' use keep-alive semantics - required for NTLM proxy authentication
Private Const HTTP_QUERY_CONTENT_LENGTH = 5
Private Const HTTP_QUERY_FLAG_NUMBER = &H20000000
Run Code Online (Sandbox Code Playgroud)
如果您需要任何说明,请发表评论。
| 归档时间: |
|
| 查看次数: |
4108 次 |
| 最近记录: |