0

这个脚本在踢我的屁股。前进一步后退三步。:)

我有一个指定的文件夹,我的文件存放在那里,脚本一次一个地遍历它们。它查找以 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"永远是真或假。所以它永远不会是> 1IEfileName Like "N*.xls" > 1总是评估为假。

您可能想要做的是使用一个布尔值作为执行代码的标志。例如:

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 回答