VBA技术问题:使用lastrow导入外部工作簿数据仅复制首行
问题原因与修复方案
问题根源
你的代码仅复制首行的核心原因是:lastrow 变量在打开外部工作簿前就已计算,它取的是当前工作簿W列的最后一行,而非外部工作簿Sheet1的W列最后一行。如果当前工作簿W列只有W2有数据,lastrow 会等于2,最终只会复制W2:AA2这个单行范围。
修复后的代码
Private Sub CommandButton1_Click() Dim FileToOpen As Variant Dim openbook As Workbook Dim lastrow As Long Dim targetSheet As Worksheet Application.ScreenUpdating = False ' 提前指定目标工作表,简化重复引用 Set targetSheet = ThisWorkbook.Worksheets("REPORT") FileToOpen = Application.GetOpenFilename(Title:="Browse for your File & Import Range", Filefilter:="Excel Files (*.xls*), *.xls*") If FileToOpen <> False Then Set openbook = Application.Workbooks.Open(FileToOpen) ' 从外部工作簿Sheet1的W列获取最后一行行号 lastrow = openbook.Sheets("Sheet1").Cells(openbook.Sheets("Sheet1").Rows.Count, "W").End(xlUp).Row ' 复制外部工作簿中W2到AA[lastrow]的有效数据区域 openbook.Sheets("Sheet1").Range("W2:AA" & lastrow).Copy ' 粘贴值到目标工作表的下一行空白位置 targetSheet.Range("A" & targetSheet.Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues openbook.Close SaveChanges:=False End If Application.ScreenUpdating = True End Sub
关键修改说明
- 把
lastrow的计算逻辑移到打开外部工作簿之后,确保基于外部Sheet1的数据动态获取有效行数。 - 明确指定
lastrow的数据源为openbook.Sheets("Sheet1"),避免因活动工作表切换导致的引用错误。 - 新增
targetSheet变量简化目标工作表的重复引用,提升代码可读性。 - 修正文件过滤器格式为
*.xls*,优化文件匹配的准确性。
内容的提问来源于stack exchange,提问作者little turtle
相关产品推荐
相关产品推荐

