从多个文件复制单元格J1并粘贴到主文件

时间:2015-05-29 19:08:06

标签: excel vba excel-vba search copy

我目前有这个代码,它将从文件夹中获取文件,每个文件打开一个,将其名称打印到我的“主文件”的第一列,然后关闭它,然后循环遍历整个文件夹。

在每个打开的文件中,单元格J1中有信息要复制并粘贴到我的“主文件”的第3列。代码部分当前返回错误(对象不支持此属性或方法但我无法分辨它指的是哪一行)并导致程序在仅打开一个文件后停止。

有什么想法吗?

完整代码:

Sub LoopThroughDirectory()

    Dim objFSO As Object
    Dim objFolder As Object
    Dim objFile As Object
    Dim MyFolder As String
    Dim Sht As Worksheet
    Dim i As Integer

    MyFolder = "C:\Users\trembos\Documents\TDS\progress\"

Set Sht = ActiveSheet

    'create an instance of the FileSystemObject
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'get the folder object
    Set objFolder = objFSO.GetFolder(MyFolder)
    i = 1
    'loop through directory file and print names
    For Each objFile In objFolder.Files

        If LCase(Right(objFile.Name, 3)) <> "xls" And LCase(Left(Right(objFile.Name, 4), 3)) <> "xls" Then
        Else
            'print file name
            Sht.Cells(i + 1, 1) = objFile.Name
            i = i + 1
            Workbooks.Open Filename:=MyFolder & objFile.Name
        End If
        'Get TDS name of open file
        Range("J1").Select
        Selection.Copy
        Windows("masterfile.xlsm").Activate
        Range("C2").Select
        ActiveSheet.Paste
        objFile.Activate
        ActiveWorkbook.Close
    Next objFile


End Sub

破坏程序的部分代码:

'Get TDS name of open file
Range("J1").Select
Selection.Copy
Windows("masterfile.xlsm").Activate
Range("C2").Select
ActiveSheet.Paste
objFile.Activate

2 个答案:

答案 0 :(得分:1)

objFile.Activate是你的问题。

objFile不是工作簿变量,它是从objFolder.Files分配路径\文件名。

使用以下内容:

Dim NewWorkbook as Workbook
set NewWorkbook = Workbooks.Open Filename:=MyFolder & objFile.Name
.
.
.
NewWorkbook.Activate
ActiveWorkbook.Close

现在,由于您有一个引用已打开工作簿的变量,而不是最后两行,您可以用这一行替换这两行:

NewWorkbook.Close

阅读this link以获取有关消除ActivateSelect等其他方法的一些好建议,以使您的代码更清晰,更易读,更不容易因错误的地方而出错有重点,更容易维护。

答案 1 :(得分:0)

我认为问题是由于不合格的引用。具体来说,我不确定您是否可以将选择从非活动工作表粘贴到新活动工作表,但我不确定因为我避免使用.Select和.Activate所以我没有问题。

尝试用以下方法替换有问题的部分:

Sht.Range("J1").Copy Workbooks("masterfile.xlsm").Sheets(1).Cells(2,3)
objFile.Activate