首页 文章

将数据从一个工作簿复制并粘贴到另一个工作簿中

提问于
浏览
0

我试图将选定范围的单元格从一个工作簿复制到另一个工作簿 . 这是我在第一个工作簿中使用的选择范围和复制代码:

Sub Copy()

'This selects the range of active cells, adds a border and copies all data.
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
End Sub

虽然这会选择并复制第一个工作簿中的单元格,但我很难将其与将其粘贴到另一个工作簿中的宏相结合 . 下面是一个宏的示例,它将数据从一个工作簿粘贴到另一个工作簿:

Sub Paste()
Dim x As Workbook
Dim y As Workbook

'## Open both workbooks first:
Set x = Workbooks.Open(" path to copying book ")
Set y = Workbooks.Open(" path to destination book ")

'Now, transfer values from x to y:
y.Sheets("sheetname").Range("A1").Value = x.Sheets("name of copying sheet").Range("A1") 

'Close x:
x.Close

End Sub

两件事情:

  • 包含初始数据的第一个工作簿不是我计算机上保存的文档 . 它's an exported sheet from the internet I am trying to paste into a saved workbook on my computer. Therefore, I don' t认为可以获得第一个工作簿的文件路径或工作表名称 .

  • 我希望将数据粘贴到第二个工作簿的A列中的第一个可用空白单元格中 . 我相信代码是这样的: CurrentRow = Range("A1").End(xlDown).Offset(1, 0).Row 然后显然粘贴到从A列开始的那一行 .

有人可以帮我把这两个代码合二为一吗?

非常感谢你!

1 回答

  • 0

    以下是我最近使用过的两段代码片段,可以帮助您解决困境 .

    第一个代码允许您按名称(或Office Documentation所述的索引)查找特定工作表 . 这不需要您指定工作簿,因为它循环遍历所有当前打开的工作表 .

    Dim Sheet As Worksheet
    Dim sheetName As String
    
    sheetName = "Sheet1"
    
    For Each Sheet In Worksheets
        If Sheet.Name = sheetName Then
            Set GetSheet = Worksheets(sheetName)
            Exit For
        End If
    Next Sheet
    

    下一个代码片段(我不能理解,但丢失了原始信息),它将在指定的工作表中搜索包含在内的任何和所有数据,并创建一个具有找到的单元格范围的范围对象 .

    (这可能不是你想要的,因为我不确定你的问题是关于你是想要所有的数据还是只是一个选择) .

    Dim dataRange as Range
        Dim lastCol As Long
        Dim lastRow As Long
        Dim sheetCells As range
    
        Set sheetCells = Sheet.Cells
    
    
        If WorksheetFunction.CountA(sheetCells) > 0 Then
            'Search for any entry, by searching backwards by Rows.
            lastRow = sheetCells.Find(What:="*", after:=[A1], _
                       SearchOrder:=xlByRows, _
                       SearchDirection:=xlPrevious).Row
                   '    Search for any entry, by searching backwards by Columns.
            lastCol = sheetCells.Find(What:="*", after:=[A1], _
                       SearchOrder:=xlByColumns, _
                       SearchDirection:=xlPrevious).Column
    
                ' Set the range from 1st cell of sheet to last cell found to contain data
                Set dataRange = Sheet.range(Sheet.Cells(1, 1), Sheet.Cells(lastRow, lastCol))
    
    
        End If
    

    一旦你有了一个范围对象,你可以做很多事情,但只需将值插入另一个工作表:

    Dim newSheet as WorkSheet
    
    set newSheet = ThisWorkbook.Worksheets("New Sheet") ' Just an example
    
    'Using fields from last code snippet
    newSheet.Range(newSheet.Cells(1,1), newSheet.Cells(lastRow,lastCol)).value = dataRange.Value
    

相关问题