根据另一个单元格的条件将文件夹名称放入单元格中

时间:2013-01-12 02:37:05

标签: excel vba

  

可能重复:
  Using FSO to insert folder name into cell based on criteria being met

这是我正在尝试做的事情:

  • 检查有关数据的最后一个单元格位于“A”列(作品)
  • 中的位置
  • 将数据粘贴到“A”列到wbkVer.Worksheets(“Cutsheets”)(有效)
  • 找到文件夹的名称,即fsoFol.Name(works)
  • 对于“A”中的每个粘贴的单元格,检查值。
  • 如果有值,我需要将fsoFol.Name放在偏移量(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

1 个答案:

答案 0 :(得分:1)

For Each a In b循环的语法错误:b返回一个集合(在这种情况下,Cells中的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