3

VBA中是否有任何相当于“%”符号的SQL?我需要返回一些中间有一些字符的文件。

帮助真的很感激!

例如,这是我的代码:我需要从该网页下载名称为 2013 的所有文件,然后保存并以不同的方式调用它们。这个任务可以吗?

Sub Sample()
    Dim strURL As String
    Dim strPath As String
    Dim i As Integer

    strURL = "http://cetatenie.just.ro/wp-content/uploads/Ordin-********.2013.pdf"

    strPath = "C:\Documents and Settings\ee28118\Desktop\178.pdf"

    Ret = URLDownloadToFile(0, strURL, strPath, 0, 0)

    If Ret = 0 Then
        MsgBox "File successfully downloaded"
    Else
        MsgBox "Unable to download the file"
    End If
End Sub
4

4 回答 4

6

您可以使用 Like 运算符。

模式中的字符匹配字符串中的字符

? Any single character. 
* Zero or more characters. 
# Any single digit (0–9). 
[charlist] Any single character in charlist. 
[!charlist] Any single character not in charlist 

例子 :

Dim MyCheck
MyCheck = "aBBBa" Like "a*a"    ' Returns True.
MyCheck = "F" Like "[A-Z]"    ' Returns True.
MyCheck = "F" Like "[!A-Z]"    ' Returns False.
MyCheck = "a2a" Like "a#a"    ' Returns True.
MyCheck = "aM5b" Like "a[L-P]#[!c-e]"    ' Returns True.
MyCheck = "BAT123khg" Like "B?T*"    ' Returns True.
MyCheck = "CAT123khg" Like "B?T*"    ' Returns False.
于 2013-03-26T10:26:59.060 回答
2

试试下面的代码:如果字符串中包含字符串2013,布尔函数将返回 true。

Sub Sample()
    Dim result As Boolean
    result = has2013("http://cetatenie.just.ro/wp-content/uploads/Ordin-********.2013.pdf")
    Debug.Print result
    result = has2013("http://cetatenie.just.ro/wp-content/uploads/Ordin-********.2014.pdf")
    Debug.Print result
End Sub

Function has2013(lnk As String) As Boolean
    has2013 = lnk Like "*2013*"
End Function
于 2013-03-26T10:52:30.200 回答
2

当您导航到上传文件夹时,您会获得其中所有文件的目录列表。您可以遍历该列表上的超链接并测试每个链接,看看它是否符合您的标准,如果符合,请下载它。您需要参考 MSXML 和 MSHTML。这是一个例子。

Sub Sample()

    Dim sUrl As String
    Dim xHttp As MSXML2.XMLHTTP
    Dim hDoc As MSHTML.HTMLDocument
    Dim hAnchor As MSHTML.HTMLAnchorElement
    Dim Ret As Long
    Dim sPath As String
    Dim i As Long

    sPath = "C:\Documents and Settings\ee28118\Desktop\"
    sUrl = "http://cetatenie.just.ro/wp-content/uploads/"

    'Get the directory listing
    Set xHttp = New MSXML2.XMLHTTP
    xHttp.Open "GET", sUrl
    xHttp.send

    'Wait for the page to load
    Do Until xHttp.readyState = 4
        DoEvents
    Loop

    'Put the page in an HTML document
    Set hDoc = New MSHTML.HTMLDocument
    hDoc.body.innerHTML = xHttp.responseText

    'Loop through the hyperlinks on the directory listing
    For i = 0 To hDoc.getElementsByTagName("a").Length - 1
        Set hAnchor = hDoc.getElementsByTagName("a").Item(i)

        'test the pathname to see if it matches your pattern
        If hAnchor.pathname Like "Ordin-*.2013.pdf" Then
            Ret = UrlDownloadToFile(0, sUrl & hAnchor.pathname, sPath, 0, 0)

            If Ret = 0 Then
                Debug.Print sUrl & hAnchor.pathname & " downloaded to " & sPath
            Else
                Debug.Print sUrl & hAnchor.pathname & " not downloaded"
            End If
        End If
    Next i

End Sub

编辑

我假设 URLDownloadToFile 已经写好了。我没有写,我只是使用下面的函数来测试遍历文件的代码。您可以使用它来确保上述代码适合您,但您需要编写实际代码才能最终下载文件。有了 URLDownloadToFile 的所有参数,我很惊讶它还不存在。

Function UrlDownloadToFile(lNum As Long, sUrl As String, sPath As String, lNum1 As Long, lNum2 As Long) As Long

    UrlDownloadToFile = 0

End Function
于 2013-03-26T13:07:50.997 回答
1

在 VBA 中使用带有通配符的 LIKE 函数:

这是一个示例(从Ozgrid 论坛复制)

Dim sht As Worksheet 
For Each sht In ActiveWorkbook.Worksheets 
    If sht.Name Like "FRI*" Then 
         'Add code for Friday sheets
    Else 
        If sht.Name Like "MON*" Then 
             'Add code for Monday sheets
        End If 
    End If 
Next 

乘法字符 * 代替零个或多个字符,而? 正好代替 1 个字符,#代替 1 个数字。还有其他更具体的字符。如果您只想匹配某些字符,则使用匹配策略。

所以你去吧!

此外,您可以查看Ozgrid 论坛:在 VBA 中使用正则表达式

要获取服务器上的文件列表,请在Excel 先生的 FTP(使用 DIR)上阅读 - 使用 FTP 列出文件

于 2013-03-26T10:27:24.843 回答