在第一次迭代后执行循环

时间:2013-01-01 19:11:13

标签: excel vba

这个脚本踢我的屁股。向前迈出3步。 :)

我有一个指定文件夹,我的文件位于该文件夹中,脚本一次一个地浏览它们。它查找以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

1 个答案:

答案 0 :(得分:2)

不,这不是正确的语法。

Infact fileName Like "N*.xls"将永远是真或假。所以它永远不会是> 1 I.E. fileName 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

...表示我没有显示的大量代码,因为我想让重要部分更清晰。