抑制"下载文件"框

时间:2018-05-04 15:30:10

标签: vba excel-vba excel

我有一个工作簿,它引用(使用vba,没有公式)另一个远程存储在服务器上的工作簿。

我希望打开工作簿没有问题,使用我的引用并关闭工作簿,而不会让用户知道除了一个主要缺陷。当我使用Workbooks.Open(MyPath)时,它会显示"正在下载"框中显示此文件的位置。我不希望用户看到这个。

1

有没有办法压制这个框?

我已尝试application.screenupdating = Falseapplication.displayalerts = False

在网上看不了多少,论坛上的类似问题没有得到答复,但是一小时的工作依赖于这一点,好像提示无法被抑制我需要废弃整个的事情。

1 个答案:

答案 0 :(得分:2)

以下是您考虑和/或尝试的一些可能性。

第四个选项可能是最简单/最好的选择:

  1. 您可以使用Windows API获取Downloading对话框的窗口句柄,也许使用GetWindowGetTopWindow功能广告,然后根据需要隐藏或以其他方式操纵窗口。网上有很多样本,包括this post关于在Office中使用Windows API函数。

  2. 可以以编程方式将驱动器号(即X:)映射到URL,并使用驱动器号打开文件。更多信息here

  3. 也许您可以通过本地文件 hotlink 创建一个" dummy"基本上只是重定向到网络上文件的页面。

    以下是使用随机下载的PDF食谱在线的示例。将以下内容复制到记事本中并将其另存为test.html

    <html>
    <body>
    <iframe 
      src="https://thestonesoup.com/blog/images/free_stonesoup_ecookbook.pdf" 
      frameborder="0" width="800" height="2500" scrolling="no">
    </iframe>
    </body>
    </html>
    

    双击该文件将在您的浏览器中打开它,并将自动下载(或提示下载)PDF,而不会显示文件实际所在的位置。这可能适用于您的案件,也可能不适用。更多信息here

  4. 阻止Workbooks.Open方法生成对话框的唯一真正方法是不使用该方法。也许最好以编程方式下载文件,然后再打开本地复制(无论如何Excel正在为你做的事情)。

    您可以使用 WinHTTP 文件下载程序,如下所示:

     Sub downloadFile(fileURL As String, saveFilePath As String)
        Dim WinHttpReq As Object, oStream
        Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
        WinHttpReq.Open "GET", fileURL, False
        WinHttpReq.send
        If WinHttpReq.Status = 200 Then
            Set oStream = CreateObject("ADODB.Stream")
            oStream.Open
            oStream.Type = 1
            oStream.Write WinHttpReq.responseBody
            oStream.SaveToFile saveFilePath, 1 ' 1 = no overwrite, 2 = overwrite
            oStream.Close
            Debug.Print "Saved: " & saveFilePath
        Else
            Debug.Print "Couldn't download: " & fileURL
        End If
    End Sub
    
  5. 示例:

    这会将PDF下载到驱动器c:\

        downloadFile "https://thestonesoup.com/blog/images/free_stonesoup_ecookbook.pdf", "c:\temp.pdf"
    

    ...使用 Shell 打开文件,例如:

        Shell ("excel.exe c:\yourFile.xlsx")
    
      

    关于在Excel中保护信息的重要说明:

         

    您无法

         

    无法保证在Office文档中保护数据或代码的方法。甚至Excel的VBA项目密码保护和加密也可以被新手用户轻松击败,只使用谷歌和一点点决心(可能在2分钟内)。