Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 根据另一个单元格的条件将文件夹名称放入单元格_Excel_Vba - Fatal编程技术网

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

Excel 根据另一个单元格的条件将文件夹名称放入单元格,excel,vba,Excel,Vba,可能重复: 以下是我想做的: 检查“A”列中最后一个有数据的单元格的位置(works) 将数据粘贴到wbkVer.工作表(“剪切表”)的“A”列(工作) 查找文件夹的名称,即fsoFol.name(works) 对于“A”中粘贴的每个单元格,检查值 如果有一个值,我需要将fsoFol.Name放在偏移量(0,5)中——这应该能够引用firstRange变量之外的值,但是每个单元格,我不知道如何做——或者最好的方法。(不起作用) 如果没有值,请跳过它 建议?先谢谢你 Dim FSO As

可能重复:

以下是我想做的:

  • 检查“A”列中最后一个有数据的单元格的位置(works)
  • 将数据粘贴到wbkVer.工作表(“剪切表”)的“A”列(工作)
  • 查找文件夹的名称,即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
Dim FSO作为对象,fld作为对象,Fil作为对象
作为对象的Dim fsoFile
作为对象的Dim fsoFol
设置FSO=CreateObject(“Scripting.FileSystemObject”)
设置fld=FSO.getfolder(folderPath)
如果存在FSO.Folder(fld),则
对于FSO.getfolder(folderPath).子文件夹中的每个fsoFol
对于fsoFol.Files中的每个fsoFile
如果Mid(fsoFile.Name,InStrRev(fsoFile.Name,“.”+1)=“xls”,则
fileName=fsoFile.Name
Application.ScreenUpdating=False
设置wbkCS=Workbooks.Open(fsoFile.Path)
如果文件名像“V*.xls”,那么
wbkCS.工作表(“切割表”).范围(“S4:S2000”).副本
使用wbkVer.工作表(“剪切表”)
Set firstRange=.Range(“A”&.Rows.Count).End(xlUp).Offset(1,0)
firstRange.Paste特殊XLPaste值
对于wbkVer.工作表(“剪切表”)中的每个firstRange.值
如果firstRange.Value为“”,则
firstRange.Offset(0,5).Value=fsoFol.Name
如果结束
下一个

对于b循环中的每个a,您的
语法是错误的:
b
返回一个集合(在本例中,
工作表中的
单元格
a
必须是该集合的成员类型(在本例中为“范围”)

所以正确的语法是正确的

For Each firstRange in wbkVer.Worksheets("Cutsheets")
也就是说,你真的不想这么做。循环将要做的是检查工作表上的每个单元格(数十亿!),这将是如此之慢。而且,它会跑掉,因为每次它找到一个非空白单元格时,它都会创建另一个,以跳转
If

更新

根据你的评论,我认为你想要的是:

  • 对于刚刚粘贴到列
    A
    中的每个非空单元格,将
    fsoFol.Name
    的值放入列
    F
如果是,请尝试此操作(从
wbkCS.工作表(“切割表”).范围(“S4:S2000”).替换。复制
down)


你想做什么还不清楚。也许可以添加一些所需输出的屏幕截图。简单的方法是…当数据粘贴到列A中时,我需要它也将文件夹名称粘贴到偏移列(0,5)中。也许这是更好的查看方式。但是,因为我复制/粘贴了一系列数据(S4:S2000)我不知道我该怎么做。另一个考虑因素是,在A列中,从其他来源复制/粘贴到该范围以下的数据会有不同的范围(因此是自底/向上单元格搜索).再一次,克里斯,你就是那个人!这正是我想要的。顺便说一句,这些代码调整帮助我从错误中学习到了很多东西,并学习了其他做事的方法,所以我感谢你!
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