Vba 从Excel单元格中的地址创建PDF
我已经找了几个小时了,还没有找到解决办法。我有一个2000多个PDF文件的列表,这些文件超链接到内部Sharepoint驱动器。我的目标是使用VBA或命令提示符创建PDF的本地副本,但到目前为止,我还并没有遇到一个证明有效的序列 是否可以仅从http地址列表中呈现PDF?Vba 从Excel单元格中的地址创建PDF,vba,excel,command-prompt,pdf-conversion,Vba,Excel,Command Prompt,Pdf Conversion,我已经找了几个小时了,还没有找到解决办法。我有一个2000多个PDF文件的列表,这些文件超链接到内部Sharepoint驱动器。我的目标是使用VBA或命令提示符创建PDF的本地副本,但到目前为止,我还并没有遇到一个证明有效的序列 是否可以仅从http地址列表中呈现PDF? 这可以使用VBA实现吗? 如果是,怎么做 提前感谢您的阅读。我假设您在Sheet1的a列中有2000多个链接。下面的代码还将标记PDF文件是否存在(URL验证),并将其记录在相邻的B列中 此外,如果内部网站(sharepoin
这可以使用VBA实现吗?
如果是,怎么做
提前感谢您的阅读。我假设您在Sheet1的a列中有2000多个链接。下面的代码还将标记PDF文件是否存在(URL验证),并将其记录在相邻的B列中 此外,如果内部网站(sharepoint)需要强制登录/密码,则此代码可能需要修改
选项显式
副下载(PDF)
我想我会坚持多久
Dim FileNum尽可能长
Dim FileData()作为字节
将MyFile设置为字符串
作为对象的Dim wHttp
将文件设置为字符串
Dim strDownloadDirectory作为字符串
变暗RNG源作为范围
变暗rng As范围
出错时继续下一步
设置wHttp=CreateObject(“WinHTTP.WinHTTPrequest.5”)
如果错误号为0,则
设置wHttp=CreateObject(“WinHTTP.WinHTTPrequest.5.1”)
如果结束
错误转到0
出错时继续下一步
'提供目标目录
strDownloadDirectory=“C:\MyDownloads”
'提供超链接列表的源范围
设置rngSource=Worksheets(“Sheet1”).Range(“A2:A”和Worksheets(“Sheet1”).Range(“A”和Application.Rows.Count)。End(xlUp.Row)
'如果下载目录(目标)不存在,则创建它。
如果Dir(strDownloadDirectory,vbDirectory)=空,则MkDir strDownloadDirectory
“如果没有url,那么继续下去就没有意义
如果是rngSource.Cells.Count检查。当你成功下载单个文件时,只需将代码打包成一个循环来下载所有的文件。你到底需要做什么还不清楚。您是否正在尝试自动下载大量PDF?谢谢您的输入!我已经尝试了这个脚本好几次,并且经常遇到文件未找到的错误。由于怀疑这可能与URL中的空格有关,我将“%20”作为空格的子项,但仍然收到错误。我已经删除了“http://”前缀,但仍然无法成功地使用此脚本…Ideas?正如我已经提到的-“如果内部网站(sharepoint)需要强制登录/密码,则此代码可能需要修改。”要检查这一点,请尝试在匿名模式下打开PDF链接,如果这会出现登录屏幕,则代码需要修改。我尝试过在登录屏幕验证和未验证的情况下打开PDF链接,并使用匿名模式和非登录模式。
Option Explicit
Sub Download_PDF()
Dim i As Long
Dim FileNum As Long
Dim FileData() As Byte
Dim MyFile As String
Dim wHttp As Object
Dim TempFile As String
Dim strDownloadDirectory As String
Dim rngSource As Range
Dim rng As Range
On Error Resume Next
Set wHttp = CreateObject("WinHTTP.WinHTTPrequest.5")
If Err.Number <> 0 Then
Set wHttp = CreateObject("WinHTTP.WinHTTPrequest.5.1")
End If
On Error GoTo 0
On Error Resume Next
'Provide destination directory
strDownloadDirectory = "C:\MyDownloads"
'Provide source range of list of hyperlinks
Set rngSource = Worksheets("Sheet1").Range("A2:A" & Worksheets("Sheet1").Range("A" & Application.Rows.Count).End(xlUp).Row)
'If Download Directory (Destination) doesn't exist then create it.
If Dir(strDownloadDirectory, vbDirectory) = Empty Then MkDir strDownloadDirectory
'If there is no url then no point in continuing
If rngSource.Cells.Count <= 0 Then Exit Sub
For Each rng In rngSource.Cells
MyFile = rng.Text
If CheckURL(MyFile) Then
FileNum = FreeFile
rng.Offset(0, 1).Value = "Downloading ..."
TempFile = Right(MyFile, InStr(1, StrReverse(MyFile), "/") - 1)
wHttp.Open "GET", MyFile, False
wHttp.Send
FileData = wHttp.ResponseBody
FileNum = FreeFile
Open "C:\MyDownloads\" & TempFile For Binary Access Write As #FileNum
Put #FileNum, 1, FileData
Close #FileNum
If Err.Number <> 0 Then
rng.Offset(0, 1).Value = "Error while Downloading : " & Err.Description
Err.Clear
Else
rng.Offset(0, 1).Value = "Download Successful!"
End If
Else
rng.Offset(0, 1).Value = "File not found !!"
Err.Clear
End If
Next
Set wHttp = Nothing
MsgBox "Open the folder [ " & strDownloadDirectory & " ] for the downloaded files..."
End Sub
'Validate the given URL (Hyperlinks)
Function CheckURL(URL) As Boolean
Dim wHttp As Object
On Error Resume Next
Set wHttp = CreateObject("winhttp.winhttprequest.5")
If Err.Number <> 0 Then
Set wHttp = CreateObject("winhttp.winhttprequest.5.1")
End If
On Error GoTo 0
On Error Resume Next
wHttp.Open "HEAD", URL, False
wHttp.Send
If wHttp.Status = 200 Then
CheckURL = True
Else
CheckURL = False
End If
End Function