Excel VBA:如何在C、D列最后一行下方粘贴数据?语法错误修复
修正VBA代码实现指定区域粘贴功能
问题分析
原代码中ThisWorkbook.Worksheets("Sheet2").Range("C") & Rows.Count).end(xlup).Row).Filldown存在两处核心问题:
- 语法错误:括号嵌套不匹配,且
Range("C") & Rows.Count的写法不符合VBA语法规范,正确引用应为Range("C" & Rows.Count) - 方法误用:
FillDown是用于向下填充已有单元格内容的方法,无法实现粘贴复制数据的需求,需使用粘贴类方法或直接指定复制目标区域
修正后的完整代码
Sub Upload_file() Dim FileToOpen As Variant Dim Openbook As Workbook Dim targetWs As Worksheet Dim targetStartRow As Long Application.ScreenUpdating = False FileToOpen = Application.GetOpenFilename If FileToOpen <> False Then Set Openbook = Application.Workbooks.Open(FileToOpen) Set targetWs = ThisWorkbook.Worksheets("Sheet2") ' 获取Sheet2中C列最后一个非空单元格的下一行行号 targetStartRow = targetWs.Range("C" & targetWs.Rows.Count).End(xlUp).Row + 1 ' 复制指定区域并粘贴到目标位置 Openbook.Sheets(3).Range("E2:F152893").Copy _ Destination:=targetWs.Range("C" & targetStartRow) Openbook.Close False End If Application.ScreenUpdating = True End Sub
关键修正点说明
- 目标行定位:通过
targetWs.Range("C" & targetWs.Rows.Count).End(xlUp).Row + 1精准定位到C列已有数据的下一行,避免覆盖原有数据 - 直接指定复制目标:使用
Copy Destination:=的写法,比单独复制再粘贴更简洁高效,同时避免剪贴板占用问题 - 对象变量化:将目标工作表赋值给
targetWs变量,减少重复代码书写,提升代码可读性和维护性
可选优化方案
如果需要仅粘贴值(忽略格式等),可以将复制粘贴部分替换为:
' 仅粘贴值 Openbook.Sheets(3).Range("E2:F152893").Copy targetWs.Range("C" & targetStartRow).PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False ' 清除剪贴板状态
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

