【问题标题】:Copy a specific worksheet from user selected workbook into the macro workbook将用户选择的工作簿中的特定工作表复制到宏工作簿中
【发布时间】:2015-08-01 18:43:40
【问题描述】:

我想实现以下目标:

  1. 用户选择工作簿
  2. 宏应复制整个工作表(工作表名称:“按位置划分的修复摘要”)
  3. 通过创建一个名为“上周维修摘要”的新工作表,将整个工作表数据粘贴到宏工作簿中
  4. 如果用户取消选择工作簿,宏应退出子。

最好在不打开所选工作簿的情况下完成此操作。但没有必要。如果它确实打开了用户选择的工作簿。它应该关闭它而不保存。

请帮忙。

过去,我在多文件选择和编译宏方面得到了帮助,这与我的要求相似,我只是调整了一些行以使其工作。我知道这不是正确的方法。此外,如果用户取消选择文件,它不会关闭。

Sub Run()

Dim DataBook As Workbook, OutBook As Workbook
Dim DataSheet As Worksheet, OutSheet As Worksheet
Dim TargetFiles As Variant
Dim MaxNumberFiles As Long, FileIdx As Long, _
    LastDataRow As Long, LastDataCol As Long, _
    HeaderRow As Long, LastOutRow As Long
Dim DataRng As Range, OutRng As Range


'initialize constants
MaxNumberFiles = 1
HeaderRow = 1 'assume headers are always in row 1
LastOutRow = 1

'prompt user to select files
Set TargetFiles = Application.FileDialog(msoFileDialogOpen)

With TargetFiles
    .AllowMultiSelect = False
    .Title = "Select the last week report:"
    .ButtonName = ""
    .Filters.Clear
    .Filters.Add ".xlsx files", "*.xlsx"
    .Show
End With



'set up the output workbook
Set OutBook = ThisWorkbook 'Worksheets.Add
Set OutSheet = OutBook.Sheets.Add
OutSheet.Name = "Last Week Repair Summary"
Set OutSheet = OutBook.Sheets(1)


'loop through all files
For FileIdx = 1 To TargetFiles.SelectedItems.Count

    'open the file and assign the workbook/worksheet
    Set DataBook = Workbooks.Open(TargetFiles.SelectedItems(FileIdx))
    Set DataSheet = DataBook.Sheets("Repair Summary by Location")

    'identify row/column boundaries
    LastDataRow = DataSheet.Cells.Find("*", SearchOrder:=xlByRows,         SearchDirection:=xlPrevious).Row
    LastDataCol = DataSheet.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

'if this is the first go-round, include the header
    Set DataRng = Range(DataSheet.Cells(HeaderRow, 1),     DataSheet.Cells(LastDataRow, LastDataCol))
    Set OutRng = Range(OutSheet.Cells(HeaderRow, 1), OutSheet.Cells(LastDataRow, LastDataCol))


'copy the data to the outbook
DataRng.Copy OutRng

'close the data book without saving
DataBook.Close False



Next FileIdx

End Sub 

【问题讨论】:

    标签: vba excel


    【解决方案1】:
    Sub Run()
    
    Dim DataBook As Workbook, OutBook As Workbook
    Dim DataSheet As Worksheet
    Dim TargetFile As Variant
    
    'prompt user to select files
    Set TargetFile = Application.FileDialog(msoFileDialogOpen)
    
    With TargetFile
        .AllowMultiSelect = False
        .Title = "Select the last week report:"
        .ButtonName = ""
        .Filters.Clear
        .Filters.Add ".xlsx files", "*.xlsx"
        .Show
    End With
    
    'set up the output workbook
    Set OutBook = ThisWorkbook 'Worksheets.Add
    
    If TargetFile.SelectedItems.Count = 0 Then
        Exit Sub
    Else
        'open the file and assign the workbook/worksheet
        Set DataBook = Workbooks.Open(TargetFile.SelectedItems(1))
        Set DataSheet = DataBook.Sheets("Repair Summary by Location")
        OutBook.Sheets("Last week repair summary").UsedRange.Delete 
        DataSheet.UsedRange.Copy OutBook.Sheets("Last week repair summary").Cells(1, 1) 
        'close the data book without saving
        DataBook.Close False
    
    End If
    
    End Sub
    

    【讨论】:

    • 效果很好。谢谢你。只是为了带来另一种变化-如何在用户选择的“按位置修复摘要”表上复制整个数据并粘贴到宏工作簿中已经存在的“上周修复摘要”表中(即,不添加表)?我尝试执行此 DataSheet.Copy OutBook.Sheets("Last week repair summary") 但它会在宏工作簿中创建该工作表的副本。
    • 根据您的要求更新。
    • 它会打开用户选择的文件,但不会复制数据,也不会将数据粘贴到宏书的“上周修复摘要”表中。
    • 检查您使用的范围有多大。您希望看到的最后一行下方可能有许多空白行。如果按 Ctrl+End,会转到哪一行?
    • “Repair Summary by Location”中的数据范围是A1:F32 这个需要复制粘贴到宏书的“Last week repair summary”表中。宏在上周维修汇总表中创建 5 个 A1:F32 副本,并将前 40 行留空
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2013-03-01
    • 2014-05-14
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多