Vba 从Excel单元格中的地址创建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

我已经找了几个小时了,还没有找到解决办法。我有一个2000多个PDF文件的列表,这些文件超链接到内部Sharepoint驱动器。我的目标是使用VBA或命令提示符创建PDF的本地副本,但到目前为止,我还并没有遇到一个证明有效的序列

是否可以仅从http地址列表中呈现PDF?
这可以使用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