从VBA中的url下载文本文件

从VBA中的url下载文本文件,vba,Vba,我需要在VBA中一次性下载管道清除文本文件。我在其他堆栈溢出问题中尝试了许多解决方案,但似乎无法使任何解决方案起作用。它来自我公司的内部维基页面 该文件类似于: 注意:这不是一个真正的url 编辑:我在excel中工作 我对VBA非常陌生,所以我读到的解决方案可能会有用,但它们不是傻瓜式的 我尝试了很多方法,但最有希望的是发布在这里的解决方案: 我停止使用第一个浏览器,因为它似乎需要Mozilla,而我不知道如何指定Chrome 我把OpenWorkbook选项弄得一团糟,但我一直收到一个编译错

我需要在VBA中一次性下载管道清除文本文件。我在其他堆栈溢出问题中尝试了许多解决方案,但似乎无法使任何解决方案起作用。它来自我公司的内部维基页面

该文件类似于:

注意:这不是一个真正的url

编辑:我在excel中工作

我对VBA非常陌生,所以我读到的解决方案可能会有用,但它们不是傻瓜式的

我尝试了很多方法,但最有希望的是发布在这里的解决方案:

我停止使用第一个浏览器,因为它似乎需要Mozilla,而我不知道如何指定Chrome

我把OpenWorkbook选项弄得一团糟,但我一直收到一个编译错误,上面写着“Expected:=”,但我不知道问题出在哪里,也不知道应该出在哪里


编辑:@Tim Williams-除了VBA错误之外,您的解决方案最有可能发生任何事情。我已经将电子表格变成了登录页面,所以我想我需要以某种方式传递用户名和密码

您应该能够打开宏录制器并快速获取所需内容。事实上,您可能花了10倍多的时间来描述场景,然后记录所需的代码。尽管如此,您可能实际上无法使用宏记录器导入数据。您应该仍然能够通过引用CSV导入数据,我相信这与文本文件完全相同

Sub Import_CSV_File_From_URL()

    Dim URL As String
    Dim destCell As Range

    URL = "http://www.test.com/test.csv"

    Set destCell = Worksheets("test").Range("A1")

    With destCell.Parent.QueryTables.Add(Connection:="TEXT;" & URL, Destination:=destCell)
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileCommaDelimiter = True
        .Refresh BackgroundQuery:=False
    End With

    destCell.Parent.QueryTables(1).Delete

End Sub
如果这对您不起作用,只需下载文件,然后从硬盘导入即可

Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
  "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
    szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Sub DownloadFilefromWeb()
    Dim strSavePath As String
    Dim URL As String, ext As String
    Dim buf, ret As Long
    URL = Worksheets("Sheet1").Range("A2").Value
    buf = Split(URL, ".")
    ext = buf(UBound(buf))
    strSavePath = "C:\Users\rshuell\Desktop\Downloads\" & "DownloadedFile." & ext
    ret = URLDownloadToFile(0, URL, strSavePath, 0, 0)
    If ret = 0 Then
        MsgBox "Download has been succeed!"
    Else
        MsgBox "Error"
    End If
End Sub

您尝试了什么?发生了什么?我的第一个建议是使用MSXML中的类。添加对Microsoft XML 6.0的引用(工具->引用…)。由于VBA不支持像Javascript那样传递函数,您必须将
False
传递给
open
方法的async参数,一旦它到达下一行,
responseText
将可用;或者您必须设置某种轮询循环来检查
status
属性,并使用
responseText
属性读取文本。是否尝试了
工作簿。打开(“https://wiki.somecompany/downloads/attachments/data.txt“”
如果您尝试过以前发布的其他解决方案,您应该包括您尝试过的代码,并准确描述运行该代码时发生的情况。@TimWilliams为什么假设OP在Excel中工作?它可能是Word、Access,甚至可能是Powerpoint。@ZevSpitz-我想这只是习惯。也许他们会澄清。。。