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