Excel,循环浏览XLSM文件并将行复制到另一张表

戴维营救

我现在用此代码遇到的主要问题是处理我打开的xlsm文件的错误。我没有这些文件上的VB代码的编辑权限。如果vb错误,是否可以跳过文件?

我有一个包含约99个xlsm文件的文件夹,我希望遍历每个文件并进行复制,让我们说每个工作簿的第14行,然后将其粘贴到单独的工作簿中作为摘要。这是我到目前为止所拥有的;唯一的问题是它复制了空白行。当我逐步执行VB时,我看到它没有在打开的xlsm文件上运行宏。有人知道一些对我有帮助的代码吗?

 Sub MergeAllWorkbooks()
Dim SummarySheet As Worksheet
Dim FolderPath As String
Dim NRow As Long
Dim FileName As String
Dim WorkBk As Workbook
Dim SourceRange As Range
Dim DestRange As Range
Application.Calculation = xlCalculationAutomatic
' Create a new workbook and set a variable to the first sheet.
Set SummarySheet = Workbooks.Add(xlWBATWorksheet).Worksheets(1)

' Modify this folder path to point to the files you want to use.
FolderPath = "C:\Users\dredden2\Documents\SHAREPOINT ARCHIVING\PAGESETUP\TEST\"

' NRow keeps track of where to insert new rows in the destination workbook.
NRow = 2

' Call Dir the first time, pointing it to all Excel files in the folder path.
FileName = DIR(FolderPath & "*.xlsm")

' Loop until Dir returns an empty string.
Do While FileName <> ""
    ' Open a workbook in the folder
    Set WorkBk = Workbooks.Open(FolderPath & FileName)
    WorkBk.Application.EnableEvents = True
    WorkBk.Application.DisplayAlerts = False
    WorkBk.Application.Run _
    "'" & FileName & "'!auto_open"
    ' Set the cell in column A to be the file name.
    SummarySheet.Range("A" & NRow).Value = FileName

    ' Set the source range to be B14 through BF14.
    ' Modify this range for your workbooks.
    ' It can span multiple rows.
    Set SourceRange = WorkBk.Sheets("Retrospective Results").Range("B14:BF14")

    ' Set the destination range to start at column B and
    ' be the same size as the source range.
    Set DestRange = SummarySheet.Range("B" & NRow)
    Set DestRange = DestRange.Resize(SourceRange.Rows.Count, _
       SourceRange.Columns.Count)

    ' Copy over the values from the source to the destination.
    DestRange.Value = SourceRange.Value

    ' Increase NRow so that we know where to copy data next.
    NRow = NRow + DestRange.Rows.Count

    ' Close the source workbook without saving changes.
    WorkBk.Close savechanges:=False

    ' Use Dir to get the next file name.
    FileName = DIR()
Loop

' Call AutoFit on the destination sheet so that all
' data is readable.
SummarySheet.Columns.AutoFit

 WorkBk.Application.DisplayAlerts = False
SummarySheet.SaveAs FileName:= _
    FolderPath & "\SummarySheet\SummarySheet.xlsx" _
    , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
 End Sub
完美的

这实际上取决于您在哪里运行此宏。考虑打开另一个工作簿,并将此宏放置在工作表或模块的后面,使其与所有99个源文件和“摘要”目标文件交互。或者,您可以运行“摘要”工作簿中的所有内容,并将其更改Workbooks.AddActiveWorkbook

下面是经过稍微修改的VBA代码。与其使用范围,不如尝试逐行复制和粘贴。另外,无需调用Application.Run

Sub MergeAllWorkbooks()
    Dim SummaryWkb As Workbook, SourceWkb As Workbook
    Dim SummarySheet As Worksheet, SourceWks As Worksheet
    Dim FolderPath As String
    Dim FileName As Variant
    Dim NRow As Long

    Set SummaryWkb = Workbooks.Add()
    Set SummarySheet = SummaryWkb.Worksheets(1)

    FolderPath = "C:\Users\dredden2\Documents\SHAREPOINT ARCHIVING\PAGESETUP\TEST\"
    FileName = Dir(FolderPath)

    NRow = 1
    While (FileName <> "")
        If Right(FileName, 4) = "xlsm" Then

        Set SourceWkb = Workbooks.Open(FolderPath & FileName)
        Set SourceWks = SourceWkb.Sheets("Retrospective Results")

        'FILE NAME COPY
        SummarySheet.Range("A" & NRow) = FileName

        'DATA ROW COPY
        SourceWks.Range("B14:BF14").Copy
        SummarySheet.Range("B" & NRow).PasteSpecial xlPasteValues

        SourceWkb.Close False
        NRow = NRow + 1

        End If
    FileName = Dir
    Wend

    SummarySheet.Columns.AutoFit
    SummaryWkb.SaveAs FileName:=FolderPath & "\SummarySheet\SummarySheet.xlsx" _
           , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

    MsgBox "Data successfully extracted!", vbInformation

    Set SourceWkb = Nothing
    Set SourceWks = Nothing
    Set SummarySheet = Nothing
    Set SummaryWkb = Nothing
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

excel根据单元格值将行复制到另一张表

来自分类Dev

将Excel行从一张纸复制到另一张纸

来自分类Dev

如何将数据从一张excel表复制到另一张excel表?

来自分类Dev

将大量行从一张工作表复制到另一张工作表,但Excel 2010中的空白行除外

来自分类Dev

VBA Excel将行从一张工作表复制到另一张工作表中具有特定值的行

来自分类Dev

C#-Microsoft.Office.Interop.Excel将Excel中的所有行复制到另一张表

来自分类Dev

将 Excel 中匹配记录的行值从一张工作表复制到另一张工作表

来自分类Dev

如何使用laravel从一张表复制到另一张表?

来自分类Dev

从一张表复制到另一张表 (VBA)

来自分类Dev

EXCEL VBA代码未将范围复制到另一张工作表

来自分类Dev

Excel VBA计算过滤的单元格并复制到另一张表

来自分类Dev

VBA将符合条件的行复制到另一张工作表

来自分类Dev

通过Appscript将行复制到另一张工作表

来自分类Dev

将行从一张纸复制到另一张纸

来自分类Dev

循环:将单元格值(在列表中)从一张工作表复制到另一张工作表

来自分类Dev

循环:将单元格值(在列表中)从一张工作表复制到另一张工作表

来自分类Dev

使用Excel中的按钮将信息从一张工作表复制到新行的另一工作表

来自分类Dev

Excel VBA-从一张纸复制到另一张纸>仅复制一行

来自分类Dev

Excel VBA-从一张纸复制到另一张纸>仅复制一行

来自分类Dev

循环浏览子文件夹中的 Excel 文件并将数据复制并粘贴到一张纸上

来自分类Dev

将一行中的列范围而不是整个行复制到另一张工作表?

来自分类Dev

将一行中的列范围而不是整个行复制到另一张工作表?

来自分类Dev

如何分离列数据以从一张表复制到另一张表?

来自分类Dev

SQL Server 将随机数据从一张表复制到另一张表

来自分类Dev

将日期从一张表复制到另一张表并更改 mysql 中的格式

来自分类Dev

寻找价值并将整行复制到另一张纸上

来自分类Dev

如果它们在列标题上匹配,则将值从Excel中的一张表映射/复制到另一张

来自分类Dev

无法将列中的所有数据复制到另一张表-Excel VBA

来自分类Dev

VBA将符合条件的行复制到仅粘贴值的另一张工作表

Related 相关文章

  1. 1

    excel根据单元格值将行复制到另一张表

  2. 2

    将Excel行从一张纸复制到另一张纸

  3. 3

    如何将数据从一张excel表复制到另一张excel表?

  4. 4

    将大量行从一张工作表复制到另一张工作表,但Excel 2010中的空白行除外

  5. 5

    VBA Excel将行从一张工作表复制到另一张工作表中具有特定值的行

  6. 6

    C#-Microsoft.Office.Interop.Excel将Excel中的所有行复制到另一张表

  7. 7

    将 Excel 中匹配记录的行值从一张工作表复制到另一张工作表

  8. 8

    如何使用laravel从一张表复制到另一张表?

  9. 9

    从一张表复制到另一张表 (VBA)

  10. 10

    EXCEL VBA代码未将范围复制到另一张工作表

  11. 11

    Excel VBA计算过滤的单元格并复制到另一张表

  12. 12

    VBA将符合条件的行复制到另一张工作表

  13. 13

    通过Appscript将行复制到另一张工作表

  14. 14

    将行从一张纸复制到另一张纸

  15. 15

    循环:将单元格值(在列表中)从一张工作表复制到另一张工作表

  16. 16

    循环:将单元格值(在列表中)从一张工作表复制到另一张工作表

  17. 17

    使用Excel中的按钮将信息从一张工作表复制到新行的另一工作表

  18. 18

    Excel VBA-从一张纸复制到另一张纸>仅复制一行

  19. 19

    Excel VBA-从一张纸复制到另一张纸>仅复制一行

  20. 20

    循环浏览子文件夹中的 Excel 文件并将数据复制并粘贴到一张纸上

  21. 21

    将一行中的列范围而不是整个行复制到另一张工作表?

  22. 22

    将一行中的列范围而不是整个行复制到另一张工作表?

  23. 23

    如何分离列数据以从一张表复制到另一张表?

  24. 24

    SQL Server 将随机数据从一张表复制到另一张表

  25. 25

    将日期从一张表复制到另一张表并更改 mysql 中的格式

  26. 26

    寻找价值并将整行复制到另一张纸上

  27. 27

    如果它们在列标题上匹配,则将值从Excel中的一张表映射/复制到另一张

  28. 28

    无法将列中的所有数据复制到另一张表-Excel VBA

  29. 29

    VBA将符合条件的行复制到仅粘贴值的另一张工作表

热门标签

归档