3

VBAに「%」記号に相当するSQLはありますか?真ん中にいくつかの文字が含まれているいくつかのファイルを返す必要があります。

本当に感謝しています!

たとえば、私のコードは次のとおりです。2013という名前のすべてのファイルをそのWebページからダウンロードし、保存して別の方法で呼び出す必要があります。この使命は可能ですか?

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 

乗算文字*は0個以上の文字の代わりになりますが、正確に1文字の代わりになり、は1桁の数字の代わりになります。他にももっと具体的な文字があります。特定の文字のみを照合する場合の照合戦略。

さあ、行きます!

また、Ozgridフォーラム:VBAでの正規表現の使用もご覧ください。

サーバー上のファイルのリストを取得するには、Mr ExcelでFTP(DIRを使用)で読み取ります-FTPを使用してファイルを一覧表示します

于 2013-03-26T10:27:24.843 に答える