使用月度报告循环浏览文件夹,应用过滤器并复制到主表单

时间:2014-01-20 12:14:17

标签: excel vba

所以我已经做到了这一点,现有的堆栈溢出答案类似的问题,但现在我似乎陷入困境。我想要做的是循环一个名为“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

1 个答案:

答案 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"