Excel VBA自动化:多工作簿数据依次追加至单一工作簿的正确粘贴方法咨询
修正Excel数据粘贴的VFP代码问题
我来帮你搞定这段代码里的粘贴错误,顺便优化下逻辑让合并工作更顺畅。
首先看你原代码里的几个问题:
- 粘贴语句的语法错误:
.Cells((m.mcomo,1),(m.como,7)).Paste这里的括号使用、变量拼写都有问题,而且其实不需要手动指定粘贴的结束列,Excel会根据复制的区域自动匹配范围。 - 变量名不一致:
mcomo和como拼写混乱,会导致变量引用报错。 - 缺少Excel常量定义:VFP没法直接识别
xlLastCell这种Excel内置常量,需要手动定义对应的数值。
下面是修正并优化后的完整代码,我会逐行说明:
* 提前定义需要用到的Excel常量,避免VFP报错 #DEFINE xlLastCell 11 #DEFINE xlPasteValuesAndNumberFormats 12 && 可选,如果你只需要粘贴数据和数字格式,用这个更稳妥 xStrFName = TRIM(filemm) * 打开要合并的源工作簿 oExcel.Workbooks.Open(xStrFName) * 复制源工作表的已用数据区域 oExcel.Workbooks(2).Sheets(1).UsedRange.Copy * 操作目标工作簿的第一个工作表 WITH oExcel.Workbooks(1).Sheets(1) * 获取当前最后一个有数据的单元格 loLastCell = .Cells.SpecialCells(xlLastCell) * 提取最后一行的行号 nLastRow = loLastCell.Row * 计算要粘贴的起始行(最后一行的下一行) nNextRow = nLastRow + 1 * 方式1:粘贴全部内容(包括格式、公式等) .Cells(nNextRow, 1).Paste * 方式2:只粘贴数据和数字格式(推荐,避免不同工作簿格式混乱) * .Cells(nNextRow, 1).PasteSpecial(xlPasteValuesAndNumberFormats) ENDWITH * 关闭源工作簿,不保存(因为我们只是复制数据,不需要修改源文件) oExcel.Workbooks(2).Close(.F.)
关键说明:
- 常量定义:
xlLastCell对应的数值是11,必须提前定义,否则VFP会把它当成未定义变量报错。如果需要其他粘贴类型,可以查Excel VBA文档获取对应的常量数值。 - 粘贴语法:只需要指定粘贴的起始单元格(
nNextRow, 1即下一行第一列),Excel会自动把复制的区域从这个位置开始粘贴,不需要手动指定结束列。 - 关闭源工作簿:每次复制完数据后关闭源文件,避免Excel进程中残留大量未关闭的工作簿,防止内存占用过高。
- 变量命名:用
nLastRow、nNextRow这种清晰的变量名,避免拼写错误。
这样修改后,就能顺利把每个工作簿的数据追加到目标工作簿的最后一行下方了。
内容的提问来源于stack exchange,提问作者Claudio Iannone
相关产品推荐
相关产品推荐

