VBA按钮点击复制行数据至指定单元格无数据粘贴问题求助
VBA按钮点击复制行数据至指定单元格无数据粘贴问题求助
嘿,我来帮你排查这个问题!你说点击按钮后Sheet1的T2开始10个单元格被选中但没数据,核心问题出在你获取行号的方式不对——ActiveCell.Row并不是按钮所在的行哦!
问题根源解释
当你点击工作表上的按钮时,ActiveCell并不会自动变成按钮所在的单元格,它还是你之前手动选中的那个单元格。如果之前选中的是空白行,那复制的就是空内容,自然粘贴后看不到数据;如果选中的是其他行,复制的也是错误的行内容。
修正方案(分两种按钮类型)
按钮分表单控件和ActiveX控件两种,对应不同的获取行号方式:
情况1:表单控件按钮(Forms按钮)
如果你的按钮是从「开发工具→插入→表单控件」里添加的,用下面的代码替换你的原有代码:
Sub CopyRowToSheet1() Dim wsSource As Worksheet, wsTarget As Worksheet Dim sourceRow As Long Dim btn As Object ' 获取点击的按钮对象,进而得到它所在的工作表和行号 Set btn = Application.Caller Set wsSource = btn.TopLeftCell.Worksheet sourceRow = btn.TopLeftCell.Row Set wsTarget = ThisWorkbook.Sheets("Sheet1") ' 复制当前行A-J列的值到Sheet1的T2开始区域 wsSource.Range(wsSource.Cells(sourceRow, "A"), wsSource.Cells(sourceRow, "J")).Copy wsTarget.Range("T2").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub
情况2:ActiveX控件按钮
如果是「开发工具→插入→ActiveX控件」里的命令按钮,直接在按钮的点击事件里写(右键按钮→查看代码):
Private Sub CommandButton1_Click() Dim wsSource As Worksheet, wsTarget As Worksheet Dim sourceRow As Long Set wsSource = Me ' Me指代按钮所在的Sheet2 sourceRow = Me.CommandButton1.TopLeftCell.Row ' 获取按钮所在行 Set wsTarget = ThisWorkbook.Sheets("Sheet1") ' 更高效的赋值方式(不用剪贴板) wsTarget.Range("T2:T11").Value = wsSource.Range(wsSource.Cells(sourceRow, "A"), wsSource.Cells(sourceRow, "J")).Value End Sub
额外优化建议
你原来用Copy/PasteSpecial的方式可以换成直接赋值(上面ActiveX代码里的写法),这样不需要占用剪贴板,运行速度也更快,还能避免剪贴板内容被覆盖的问题。
备注:内容来源于stack exchange,提问作者Ilze
相关产品推荐
相关产品推荐

