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

VBA代码问题:如何将指定列复制到周报工作簿的最后一行

解决周度滚动报表粘贴至最后一行的VBA代码问题

原代码的核心问题是粘贴位置固定在表头行,且复制了数据源的表头内容,导致无法实现周度数据的滚动追加。以下是修改后的代码及关键说明:

修改后的完整代码

Sub pull_columns()
    Dim head_count As Integer
    Dim row_count As Integer
    Dim col_count As Integer
    Dim i As Integer
    Dim j As Integer
    Dim ws As Worksheet
    Dim sourceWb As Workbook
    Dim sourceWs As Worksheet
    Dim lastRow As Long ' 用Long避免行号超过Integer范围导致溢出

    Application.ScreenUpdating = False

    Set ws = ThisWorkbook.Sheets("Sheet2")

    ' 统计当前报表工作簿的表头列数
    head_count = WorksheetFunction.CountA(ws.Range("A1", ws.Range("A1").End(xlToRight)))

    ' 打开数据源工作簿并直接引用工作表(避免依赖Active对象)
    Set sourceWb = Workbooks.Open(Filename:="C:\Users\ritwi\Desktop\Book1.xlsm")
    Set sourceWs = sourceWb.Sheets(1)

    ' 统计数据源的有效行数和列数
    row_count = WorksheetFunction.CountA(sourceWs.Range("A1", sourceWs.Range("A1").End(xlDown)))
    col_count = WorksheetFunction.CountA(sourceWs.Range("A1", sourceWs.Range("A1").End(xlToRight)))

    For i = 1 To head_count
        j = 1
        Do While j <= col_count
            ' 匹配表头列
            If ws.Cells(1, i).Text = sourceWs.Cells(1, j).Text Then
                ' 获取目标列的最后一行行号,Offset定位到下一行作为粘贴起点
                lastRow = ws.Cells(ws.Rows.Count, i).End(xlUp).Row
                ' 复制数据源从第2行开始的数据(跳过表头,避免重复粘贴)
                sourceWs.Range(sourceWs.Cells(2, j), sourceWs.Cells(row_count, j)).Copy
                ' 粘贴到目标列的最后一行下方
                ws.Cells(lastRow + 1, i).PasteSpecial xlPasteValues
                Application.CutCopyMode = False
                j = col_count ' 退出当前列的循环,提升效率
            End If
            j = j + 1
        Loop
    Next i

    sourceWb.Close savechanges:=False
    ws.Cells(1, 1).Select

    Application.ScreenUpdating = True
End Sub

关键修改点说明

  • 替换Active对象引用:用sourceWb和sourceWs变量直接绑定数据源工作簿和工作表,避免操作过程中焦点变化导致的错误,代码稳定性更高。
  • 调整复制范围:从数据源的第2行开始复制内容,跳过表头,因为报表工作簿已经有固定表头,无需重复粘贴。
  • 精准定位最后一行:通过ws.Cells(ws.Rows.Count, i).End(xlUp).Row获取目标列的最后有数据行号,再用lastRow + 1定位到下一行,实现数据滚动追加。
  • 行号类型优化:改用Long类型存储行号,避免Excel行号超过Integer最大值(32767)时出现溢出错误。

内容的提问来源于stack exchange,提问作者Ritwik Nautiyal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:50:13