所以我已经做到了这一点,现有的堆栈溢出答案类似的问题,但现在我似乎陷入困境。我想要做的是循环一个名为“XXX-statistics201XXX.xls”的工作簿的文件夹并打开它们。然后将过滤器(或循环匹配字符串)应用于工作表3中的一列,并将列中的值复制到其左侧和右侧。然后应将这些复制到工作簿(在我的情况下是包含宏的工作簿,但主要是为了简化它),以及工作簿的年份和月份,可能必须从其文件名中的最后4个数字中获取。我尝试使用以下代码解决这个问题,但它只是说“无法找到子搜索”。搜索方法属于哪个对象?
dotindex = Search(".", Item.Name)
ReportDate = Mid(Item.Name, dotindex - 4, 4)
[这是Graffl修复的问题,为了节省空间而编辑出来]
我意识到这里有许多不同的问题,但对其中一个“步骤”的任何帮助将不胜感激!
Sub Collectdata()
Dim c As Range
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(ThisWorkbook.Path)
Set objFiles = objFolder.Files
Set callwbk = ThisWorkbook
Application.ScreenUpdating = True
'Iterate through the files in the folder
For Each Item In objFiles
If LCase(Right(Item.Name, 4)) = ".xls" Or LCase(Right(Item.Name, 5)) = ".xlsx" Then
If Item.Name <> callwbk.Name Then
Set usewbk = Application.Workbooks.Open(Item.Name)
On Error Resume Next
usewbk.Sheets(3).Activate
SearchColumn = usewbk.Sheets(3).Cells.Find(What:="HRSSystem").Column
'For Each c In Columns(SearchColumn) *<-- Why doesn't this work?*
For Each c In usewbk.Sheets(3).Range("C:C")
If c.Value = "SEARCHTERM" Then
c.Offset(0, 1).Copy Paste:=callwbk.Sheets(3).Cells(c.Row, 6) 'Just to test, a better destination could be used
c.Offset(0, -1).Copy Paste:=callwbk.Sheets(3).Cells(c.Row, 8)
End If
Next c
End If
End If
If usewbk <> Null Then
usewbk.Close SaveChanges:=False
End If
Next
End Sub
答案 0 :(得分:0)
更改以下内容并重试:
要打开工作簿,您需要完整的工具路径,而不仅仅是名称Application.Workbooks.Open(Item.Path)
复制和粘贴是两个单独的命令,您必须使用PasteSpecial
。
c.Offset(0, 1).Copy
callwbk.Sheets(3).Cells(c.Row, 6).PasteSpecial (xlPasteAll)
使用SearchColumn
不起作用,因为它返回列数(整数)而不是范围。但你可以使用类似的东西:
usewbk.Sheets(3).Range("A:A").Offset(0, SearchColumn - 1).Cells
你肯定应该把带有代码的文件放在文件夹之外,并附上你想要运行的文件,并使用类似的内容:ThisWorkbook.Path & "\Subfolder"