0

このスクリプトは私のお尻を蹴っています。一歩進んで三歩下がる。:)

ファイルが置かれる指定されたフォルダーがあり、スクリプトはそれらを一度に 1 つずつ処理します。N または V で始まるファイル名を検索し、ファイルの種類に応じて、コピー/貼り付けするセルの範囲を決定します。

最初の繰り返しの後、最初の列からスクリプトの動作を基にしています。スクリプトが列 A のデータを貼り付ける場所を決定した後、列 B のデータは "firstRange" 変数の場所に基づいて追随し、.Offset(-1,1) を使用してそのすぐ隣に貼り付ける必要があります。

最初に上に並べるスクリプトが必要なので、このコードは次のとおりです。

.Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues

最初の反復の後、列 A に基づいて物事を開始する必要があり、次の列は同じ行になります。これを使用します。

If fileName Like "V*.xls" > 1 Then

しかし、その構文が正しいかどうかはわかりません。最初の繰り返しの後に実行を開始しようとしています。

列 A と B のコードのクリップを次に示します。

fileName = Dir(folderPath & "*.xls")
    Do While fileName <> ""
Application.ScreenUpdating = False
    Set wbkCS = Workbooks.Open(folderPath & fileName)


If fileName Like "V*.xls" Then
    wbkCS.Worksheets("Cut Sheet").Range("S4:S2000").Copy
With wbkVer.Worksheets("Cutsheets")
    Set firstRange = .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0)
        firstRange.PasteSpecial xlPasteValues
End With
ElseIf fileName Like "N*.xls" Then
    wbkCS.Worksheets("PON Cut Sheet").Range("AV3:AV2000").Copy
        With wbkVer.Worksheets("Cutsheets")
    Set ponRange = .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0)
        ponRange.PasteSpecial xlPasteValues
End With
End If

If fileName Like "V*.xls" > 1 Then
    wbkCS.Worksheets("Cut Sheet").Range("AA4:AA2000").Copy
        With wbkVer.Worksheets("Cutsheets")
            firstRange.Offset(-1, 1).PasteSpecial xlPasteValues
End With
ElseIf fileName Like "V*.xls" Then
     wbkCS.Worksheets("Cut Sheet").Range("AA4:AA2000").Copy
    With wbkVer.Worksheets("Cutsheets")
       .Range("B" & .Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
End With
ElseIf fileName Like "N*.xls" > 1 Then
    wbkCS.Worksheets("PON Cut Sheet").Range("AA3:AA2000").Copy
    With wbkVer.Worksheets("Cutsheets")
      firstRange.Offset(-1, 1).PasteSpecial xlPasteValues
End With
ElseIf fileName Like "N*.xls" Then
    wbkCS.Worksheets("PON Cut Sheet").Range("AA3:AA2000").Copy
    With wbkVer.Worksheets("Cutsheets")
      .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
End With
End If
4

1 に答える 1

2

いいえ、それは正しい構文ではありません。

InfactfileName Like "N*.xls"は常に true または false になります。したがって、> 1IEfileName Like "N*.xls" > 1が常に false と評価されることは決してありません。

おそらくやりたいことは、コードを実行するためのフラグとして使用するブール値を持つことです。例えば:

fileName = Dir(folderPath & "*.xls")
dim hasRun as boolean
Do While fileName <> ""
...
    If fileName Like "V*.xls" AND hasRun Then 'This will never run the first time
...
hasRun = true
loop

...、重要な部分をより明確にしたかったため、表示しなかった多くのコードを表しています。

于 2013-01-01T19:32:50.553 に答える