从Excel工作表中获取数据并将其复制到活动工作簿中

时间:2013-11-05 16:44:17

标签: excel vba excel-vba

我是新手使用VBA并找到了以下代码。它工作正常,但我需要源文件中的所有行。如何更改代码,因此我不仅限于使用行号,因为每次都会有所不同。

Private Sub Import1_Click()
' Get customer workbook...
Dim customerBook As Workbook
Dim filter As String
Dim caption As String
Dim customerFilename As String
Dim customerWorkbook As Workbook
Dim targetWorkbook As Workbook

' make weak assumption that active workbook is the target
Set targetWorkbook = Application.ActiveWorkbook

' get the customer workbook
filter = "Text files (*.xlsx),*.xlsx"
caption = "Please Select an input file "
customerFilename = Application.GetOpenFilename(filter, , caption)

Set customerWorkbook = Application.Workbooks.Open(customerFilename)

' assume range is A1 - G10 in sheet1
' copy data from customer to target workbook
Dim targetSheet As Worksheet
Set targetSheet = targetWorkbook.Worksheets(1)
Dim sourceSheet As Worksheet
Set sourceSheet = customerWorkbook.Worksheets(1)

targetSheet.Range("A6", "G10").Value = sourceSheet.Range("A2", "G6").Value

' Close customer workbook
customerWorkbook.Close

End Sub

2 个答案:

答案 0 :(得分:1)

假设您要将整个工作表复制到当前工作簿中的空白工作表上并且只保留值(您的问题没有详细说明),您可以替换此行:

targetSheet.Range("A6", "G10").Value = sourceSheet.Range("A2", "G6").Value

有了这个:

sourceSheet.UsedRange.Copy targetSheet.Range("A1")
sourceSheet.UsedRange.Value = sourceSheet.UsedRange.Value

希望能证明这一点!

<强>更新


根据您的上一条评论,请尝试替换此行:

sourceSheet.UsedRange.Copy targetSheet.Range("A1")

这一行:

Intersect(sourceSheet.UsedRange, sourceSheet.UsedRange.Offset(1,0)).Copy targetSheet.Range("A1")

可以更新最后一部分Range("A1"),以便将结果粘贴到您想要的任何位置。

希望这可以解决问题!!

答案 1 :(得分:0)

以下几行必须改变,如下所示:

targetSheet.Range("A6", "G10").Value = sourceSheet.Range("A2", "G6").Value
  1. 首先,使用名称范围(出现单元名称的excel的左上角),命名源表的开始和结束单元格。说,你称之为“开始”和“结束”。

  2. 现在,您还可以在目标表中命名起始单元格。不需要结束单元格,因为它会粘贴所有内容。这是可选的,你可以保持不命名,如下所示。

  3. 然后代码看起来像......

    targetSheet.Range("A6").Value = sourceSheet.Range("start", "end").Value
    
  4. 如果您将targetSheet命名为start cell(例如“start_target”),那么它将如下所示:

    targetSheet.Range("start_target").Value = sourceSheet.Range("start", "end").Value