0

重複の可能性:
FSOを使用して、満たされている基準に基づいてフォルダー名をセルに挿入します

これが私がやろうとしていることです:

  • データを含む最後のセルが列「A」のどこにあるかを確認します(動作します)
  • データを列「A」に貼り付けてwbkVer.Worksheets( "Cutsheets")(動作)
  • fsoFol.Name(動作)であるフォルダの名前を見つけます
  • 「A」に貼り付けたセルごとに、値を確認します。
  • 値がある場合は、fsoFol.Nameをoffset(0,5)に配置する必要があります。これはfirstRange変数から参照できるはずですが、セルごとであり、その方法がわかりません。 -またはそれを行うための最良の方法。(動作しません)
  • 値がない場合はスキップしてください。

提案?前もって感謝します。

 Dim FSO As Object, fld As Object, Fil As Object
    Dim fsoFile As Object
    Dim fsoFol As Object

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set fld = FSO.getfolder(folderPath)

    If FSO.folderExists(fld) Then
        For Each fsoFol In FSO.getfolder(folderPath).subfolders
            For Each fsoFile In fsoFol.Files
                If Mid(fsoFile.Name, InStrRev(fsoFile.Name, ".") + 1) = "xls" Then
    fileName = fsoFile.Name
    Application.ScreenUpdating = False
    Set wbkCS = Workbooks.Open(fsoFile.Path)

    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
    For Each firstRange.Value in wbkVer.Worksheets("Cutsheets")
        If firstRange.Value <> "" Then
        firstRange.Offset(0, 5).Value = fsoFol.Name
                  End If
            Next
4

1 に答える 1

1

For Each a In b ループの構文が間違っていbます。コレクションを返します(この場合、CellsinはWorksheetaそのコレクションのメンバーのタイプ(この場合は `Range)である必要があります。

したがって、正しい構文は

For Each firstRange in wbkVer.Worksheets("Cutsheets")

そうは言っても、あなたは本当にこれをしたくありません。ループが行うことは、シート上のすべてのセル(数十億!)をチェックすることです。これは非常に遅くなります。また、空白でないセルを見つけるたびに、をティガーするために別のセルを作成するため、逃げますIf

アップデート

あなたのコメントに基づいて、私はあなたが欲しいものは次のとおりだと思います:

  • A空白ではない列に貼り付けたばかりのすべてのセルについて、の値をfsoFol.Name列に入力しますF

もしそうなら、これを試してください(下から交換しwbkCS.Worksheets("Cut Sheet").Range("S4:S2000").Copyてください)

Dim rngSource As Range
Set rngSource = wbkCS.Worksheets("Cut Sheet").Range("S4:S2000")
With wbkVer.Worksheets("Cutsheets")
    Set firstRange = .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(rngSource.Rows.Count, 1)
    firstRange.Value = rngSource.Value
    firstRange.SpecialCells(xlCellTypeConstants).Offset(0, 5) = fsoFol.Name
End With
于 2013-01-12T03:29:19.233 に答える