1

「N」または「V」のいずれかで始まる 2 つの異なるファイルを区別するために If/ElseIf ステートメントを追加するまで、ループは機能していました。エルシフ。ローカル ウィンドウで見ていましたが、次のファイルが正しく割り当てられていますが、スクリプトは、実際には先頭に「V」がないかのように処理します。提案?ありがとう!

問題のある作品は次のとおりです。

folderPath = myDir
If Right(folderPath, 1) <> "\" Then folderPath = folderPath + "\"
filename = Dir(folderPath & "*.xls")
Do While filename <> ""
    Application.ScreenUpdating = False
    Set wbkCS = Workbooks.Open(folderPath & filename)
    If filename = Dir(folderPath & "V*" & "*.xls") Then
        wbkCS.Worksheets("Cut Sheet").Range("S4:S2000").Copy
        With wbkVer.Worksheets("Cutsheets")
            .Range("A" & .Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValues
        End With
    ElseIf filename = Dir(folderPath & "N*" & "*.xls") Then
        wbkCS.Worksheets("PON Cut Sheet").Range("AV3:AV2000").Copy
        With wbkVer.Worksheets("Cutsheets")
            .Range("A" & .Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValues
        End With
    End If

    filename = Dir
Loop
Application.ScreenUpdating = True
4

3 に答える 3

3

Remy Porterが指摘したように、Dir関数を繰り返し使用すると、使用するたびに混乱したエントリが取得されます。

If filename = Dir(folderPath & "V*" & "*.xls") Then
この行は、毎回、V**.xlsそのパスからの最初の一致を取得します。これは確かにあなたが望むものではありません。

likeExcel VBAでは、最も簡単なソリューションとして使用できます。
If filename like "N*.xls" Then

(そして、それらのdoubleを使用しないでください**

于 2012-12-31T16:08:34.067 に答える
2

これの代わりに:-

If filename = Dir(folderPath & "V*" & "*.xls") Then
  • を使用して次の操作を行いますRegex

コード:

Function ContainsAMatch(ByRef fileName as String) as Boolean
Dim regex as Object
Dim strtxt As String

  strtxt = fileName
  Set regex = CreateObject("VBScript.RegExp")

  With regex
    '-- matches first letter to be V and last set to be .xls
    .Pattern = "^(V)[a-zA-Z0-9]+(.xls)$"   
    .Global = True
    If regex.Test(strTxt) Then
      containsAMatch = True
    Else
      containsAMatch = False
    End If
  End With

End Sub
  • 存在するかどうかを確認する別の方法V.xls使用instr

例: ファイル名 = "Vvtmvy89file.xls"

コード:

If InStr(Left(filename,1),"V") > 0 then 
  If InStr(filename, ".xls") > 0 then
    '-- Do Something
  End If
End IF

PS: コードを更新して正確なRegex.

于 2012-12-31T16:05:03.007 に答える
1

Dir は一種のめちゃくちゃな関数です。パラメーターを指定せずに Dir を呼び出すと、Dir の最後の呼び出しに戻り、その基準を満たす次のファイルを取得します。したがって、最後の行filename = Dirは、if または elseif の Dir 基準を満たす次のファイルを取得しています。

代わりにファイルシステム オブジェクトを使用する必要があります。

于 2012-12-31T16:05:07.577 に答える