1

我是使用 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
4

2 回答 2

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")可以更新以将结果粘贴到您想要的任何位置。

希望这能解决问题!

于 2013-11-05T17:09:22.247 回答
0

只需更改以下行,就像我在下面给出的那样:

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

  2. 现在,您还可以在 targetsheet 中命名您的起始单元格。不需要结束单元格,因为它无论如何都会粘贴所有内容。这是可选的,您可以保留而不用像下面这样命名它。

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

    targetSheet.Range("A6").Value = sourceSheet.Range("start", "end").Value
    
  4. 如果您也命名 targetSheet 起始单元格(例如“start_target”),那么它将是这样的:

    targetSheet.Range("start_target").Value = sourceSheet.Range("start", "end").Value
    
于 2013-11-05T17:14:43.437 回答