VBA等到文件下载

时间:2016-01-04 20:53:58

标签: vba

我正在使用VBA将图像从Web下载到我的本地计算机,然后将该图像移动到服务器。此外,我将该图像压缩为缩略图大小并将该文件移动到服务器。

在这两种情况下,当我尝试将文件移动到服务器时,我收到以下错误:

Run-time error '75': Path/File access error

我尝试使用以下代码等待文件存在以移动它:

Do While Dir(sLocalFile & ".jpg") = ""
    DoEvents
Loop

但我仍然收到错误消息。

此外,如果我点击" Debug"按钮并立即点击"继续"按下F5,宏完成执行没有问题,表明即使Dir表示文件存在,它也没有准备好被移动(即可能仍然被写入)。因此,我尝试使用以下代码继续尝试移动文件,直到它可以这样做而没有错误:

MoveFile:
    On Error GoTo MoveFile
    Name sLocalFile & ".jpg" As ServPath & PartNum & ".jpg"
    On Error GoTo 0

但是,我仍然遇到同样的错误(我也试过切换标签和On Error命令,但这并没有改变任何东西)。

修改:以下是我用来下载文件的功能:

Function DownloadFile(sSourceURL As String, _
    sLocalFile As String _
) As Boolean
    DownloadFile = URLDownloadToFile(0&, _
                                     sSourceURL, _
                                     sLocalFile, _
                                     BINDF_GETNEWESTVERSION, _
                                     0& _
                                     ) = ERROR_SUCCESS
End Function

我在网上找到了它,并且只对它正在做的事情有了基本的了解。

编辑2:我应该补充一点,这个宏是在SolidWorks内部运行的,如果没有在线可用对象的图像,我就会生成图像使用以下代码使用SolidWorks:

Dim sUrl As String, sLocalFile As String
sUrl = UserFormImportPart.TextBoxImgURL
sLocalFile = "C:\temp\" & UserFormImportPart.TextBoxPartNum
If sUrl = "" Then
    With swApp
        .SetUserPreferenceIntegerValue swUserPreferenceIntegerValue_e.swExportJpegCompression, 100
        .SetUserPreferenceIntegerValue swUserPreferenceIntegerValue_e.swTiffScreenOrPrintCapture, 1
        .SetUserPreferenceIntegerValue swUserPreferenceIntegerValue_e.swTiffPrintDPI, 400
    End With
    With swModel
        .ShowNamedView2 "*Isometric", 7
        .ViewZoomtofit2
        .Extension.InsertScene "\scenes\01 basic scenes\11 white kitchen.p2s"
        .SaveAs3 sLocalFile & ".jpg", 0, 0
        .Extension.InsertScene "\scenes\01 basic scenes\00 3 point faded.p2s"
        If Len(Dir(sLocalFile)) > 0 Then
            Kill sLocalFile
        End If
        Name sLocalFile & ".jpg" As sLocalFile
    End With
Else
    DownloadFile sUrl, sLocalFile
End If

当我下载文件以及使用SolidWorks生成文件时,都会发生错误。

1 个答案:

答案 0 :(得分:0)

基于@ NeepNeepNeep的评论,我能够提出这个似乎运作得相当好的事情:

Do While Dir(sLocalFile & ".jpg") = ""
    DoEvents
Loop
Sleep 10
NewLen = 1
Do While NewLen > OldLen
    OldLen = NewLen
    NewLen = FileLen(sLocalFile & ".jpg")
    If NewLen < OldLen Then
        NewLen = OldLen + 1
    End If
Loop
OldLen = 0

Name sLocalFile & ".jpg" As ServPath & PartNum & ".jpg"