【问题标题】:VBA - copy / paste one cell from multiple workseets to master sheetVBA - 将多个工作表中的一个单元格复制/粘贴到主表
【发布时间】:2015-06-02 13:04:55
【问题描述】:

我的代码可以打开一个文件夹中的多个文件,将该文件的名称打印到主文件的第 1 列(继续向下),关闭当前文件,然后移动到下一个文件,直到文件夹为空。

单元格 J1(最好写为 1,10)中有我要在文件打开时复制的所有文件的信息,粘贴到第 4 列(继续向下列,与每个文件的名称相同),然后继续关闭当前文件并继续。

我不知道如何只复制一个单元格,因为一个范围需要多行的信息。这是我的工作代码,用于循环文件并打印它们的名称。有任何想法吗?谢谢!

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
    Dim LastRow As Integer, erow As Integer

    'Speed up process by not updating the screen
    'Application.ScreenUpdating = False

    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" Or LCase(Left(Right(objFile.Name, 4), 3)) = "xls" Then
            'print file name
            Sht.Cells(i + 1, 1) = objFile.Name
            i = i + 1
            Workbooks.Open fileName:=MyFolder & objFile.Name

        End If

        'Macro recording of manual copy/paste but I want to apply on general scale
        'Range("J1").Select
        'Selection.Copy
        'Windows("masterfile.xlsm").Activate
        'Range("D2").Select
        'ActiveSheet.Paste
        ActiveWorkbook.Close SaveChanges:=False

        Next objFile

'Application.ScreenUpdating = True

End Sub

【问题讨论】:

    标签: excel copy-paste vba


    【解决方案1】:

    合并这个,重命名“MySheet”:

    Option Explicit
    
    Sub CopyFromSheets()
    
        Dim WB As Workbook
        Dim ws As Worksheet
        Dim i As Integer
    
        Set WB = ActiveWorkbook
        i = 1
    
        With WB
            For Each ws In .Worksheets
                With ws
                    .Range("J1").Copy Workbooks("masterfile.xlsm").Sheets("MySheet").Cells(i, 10) 'Rename Mysheet
                    i = i + 1
                End With
            Next ws
        End With
    End Sub
    

    应该这样做:

    Option Explicit
    
    Sub LoopThroughDirectory()
    
        Dim objFSO As Object
        Dim objFolder As Object
        Dim objFile As Object
        Dim MyFolder As String
        Dim Sht As Worksheet, ws As Worksheet
        Dim WB As Workbook
        Dim i As Integer
        Dim LastRow As Integer, erow As Integer
    
        Application.ScreenUpdating = False
    
        MyFolder = "C:\Users\trembos\Documents\TDS\progress\"
    
        Set Sht = Workbooks("masterfile.xlsm").Sheets("MySheet")
    
        '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" Or LCase(Left(Right(objFile.Name, 4), 3)) = "xls" Then
                'print file name
    
                Workbooks.Open Filename:=MyFolder & objFile.Name
                Set WB = ActiveWorkbook
    
                With WB
                    For Each ws In .Worksheets
                        Sht.Cells(i + 1, 1) = objFile.Name
                        With ws
                            .Range("J1").Copy Sht.Cells(i + 1, 4)
                        End With
                        i = i + 1
                    Next ws
                    .Close SaveChanges:=False
                End With
            End If
        Next objFile
    
        Application.ScreenUpdating = True
    
    End Sub
    

    【讨论】:

    • 感谢您帮助我! .Range("J1").Copy Workbooks("masterfile.xlsm").Sheets("MySheet").Cells(i, 10) 行返回超出范围错误。为了澄清起见,我从工作表中的 J1 复制到标题为“masterfile.xlsm”的工作簿的第 4 列。这就是这段代码的目标,是吗?
    • Ok 修改为从 col10 复制到 col4,添加了完整的解决方案并将 MyFolder 更改回原来的。您需要将“MySheet”的值更改为主文件的相应工作表名称。此外,这会循环遍历打开的文件中的每个工作表,因此如果不需要,如果每个工作簿中只有一个工作表,只需删除 For Each ws In .WorksheetsNext ws
    • 啊!极好的!效果很好!非常感谢您的帮助!
    • 您已经帮了我很多,但是如果您碰巧知道如何做类似的事情-复制特定标题下的列并将其移动到母版表-我一直在努力一个星期。如果您能提供任何帮助,那就太棒了!该问题的链接在这里stackoverflow.com/questions/30600381/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2015-10-03
    • 2020-07-31
    相关资源
    最近更新 更多