VBA代码仅粘贴首个源值求助:复制数据至目标表可见列
问题根源分析
你的代码里Set destRange = Sheets("Raw Data Inputs").Cells(dest_old_lrow + 1, 1)只指向了单个单元格,所以For Each cell In destRange循环只会执行一次,这就是只粘贴第一个值就停止的核心原因。另外源区域是3行(A88:BW90),原代码也没有处理多行数据的逻辑,只能覆盖单行。
修正后的代码
Sub copy_visible_cells() Dim sourceWs As Worksheet, destWs As Worksheet Dim sourceRange As Range Dim destStartRow As Long Dim sourceRow As Long, destCol As Long, sourceCol As Long Dim visibleColCount As Integer ' 定义工作表对象,避免重复调用Sheets函数 Set sourceWs = ThisWorkbook.Sheets("Automated Raw Data") Set destWs = ThisWorkbook.Sheets("Raw Data Inputs") ' 获取目标工作表最后一行,确定起始粘贴行 destStartRow = destWs.Cells(destWs.Rows.Count, "A").End(xlUp).Row + 1 ' 定义源数据区域 Set sourceRange = sourceWs.Range("A88:BW90") sourceCol = 1 ' 遍历目标工作表的列,从第一列到源区域的最大列数 For destCol = 1 To sourceRange.Columns.Count ' 检查目标列是否可见 If Not destWs.Columns(destCol).Hidden Then ' 逐行复制源数据到目标行的对应可见列 For sourceRow = 1 To sourceRange.Rows.Count destWs.Cells(destStartRow + sourceRow - 1, destCol).Value = _ sourceRange.Cells(sourceRow, sourceCol).Value Next sourceRow sourceCol = sourceCol + 1 End If ' 源数据列用完就停止循环 If sourceCol > sourceRange.Columns.Count Then Exit For Next destCol End Sub
关键修改点
- 把目标区域从单个单元格改为遍历对应源区域列数的所有列,确保能循环处理每一列
- 增加了多行数据的处理逻辑,逐行复制源区域的3行数据到目标行的对应位置
- 使用工作表对象变量,提升代码执行效率和可读性
- 调整了循环逻辑:先遍历目标列,遇到可见列就复制源区域对应列的所有行数据,同时推进源列的索引
内容的提问来源于stack exchange,提问作者rokenbk97
相关产品推荐
相关产品推荐

