使用每月报告循环播放文件夹,应用filter并复制到主表格

所以我已经做了一些现有的堆栈溢出回答类似的问题,但现在我似乎被卡住了。 我想要做的是循环一个名为“XXX-statistics201XXX.xls”工作簿的文件夹并打开它们中的每一个。 然后应用filter(或循环来匹配string)到工作表3中的一列,并将列中的值复制到它的左侧和右侧。 然后这些应该被复制到一个工作簿(在我的情况下,包含macros的工作簿,但主要是为了简化它),以及工作簿的年份和月份,可能需要从它的文件名中的最后4个数字。 我试着用下面的代码解决这个问题,但是它只是说“子search”无法find“。 search方法属于哪个对象?

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 

更改以下内容并重试:

  • 要打开工作簿,您需要完整的path,而不只是名称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"