VBA实现同工作簿跨工作表转置复制粘贴数据的求助
解决VBA转置粘贴的问题
嘿,作为VBA新手能写出这样的代码已经很棒啦!你的核心需求是把Checklist工作表里的B1:B5纵向数据,转置成横向粘贴到Central Tracker的下一个空行,对吧?
你现有代码的问题在于,Copy Destination:=这种写法没办法直接结合PasteSpecial的转置功能,我们需要把复制和粘贴的步骤拆分开来,同时加上转置参数就行。另外还有个小细节:Integer类型的变量最大只能存32767,而现在Excel的行数远远超过这个数,建议把iRow改成Long类型更稳妥。
修改后的完整代码如下:
Sub Submit() Dim rngSource As Range Dim rngTarget As Range Dim iRow As Long ' 改用Long类型适配大行数 ' 定义要复制的源区域 Set rngSource = Worksheets("Checklist").Range("B1:B5") ' 找到Central Tracker的下一个空行(A列) iRow = Worksheets("Central Tracker").Cells(Rows.Count, 1).End(xlUp).Row + 1 Set rngTarget = Worksheets("Central Tracker").Range("A" & iRow) ' 复制并转置粘贴值 rngSource.Copy rngTarget.PasteSpecial Paste:=xlPasteValues, Transpose:=True ' 清除剪贴板(可选,避免后续误操作) Application.CutCopyMode = False End Sub
关键修改点说明:
- 拆分了
Copy和PasteSpecial操作:先执行rngSource.Copy把数据放到剪贴板,再用rngTarget.PasteSpecial指定粘贴值和转置参数 - 添加了
Transpose:=True参数:这个就是实现纵向转横向的核心,会把原区域的列数据转成行数据 - 把
iRow的类型从Integer改为Long:避免当工作表行数超过32767时出现溢出错误 - 新增
Application.CutCopyMode = False:用来清空剪贴板,消除Excel界面的“复制选中状态”,提升体验
你可以直接替换原代码测试,注意确保两张工作表的名称和代码里的完全一致哦!
内容的提问来源于stack exchange,提问作者Cyizere
相关产品推荐
相关产品推荐

