You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 16:33:19