Excel VBA跨工作簿复制粘贴失效问题求助
问题分析与解决
你的代码复制粘贴未生效的核心问题是未明确指定Range的父对象,同时TxtBk的赋值逻辑存在潜在风险,具体修正点如下:
1. 避免依赖Activate,直接通过对象引用单元格
使用Activate切换工作表容易因上下文变化导致错误,直接通过工作簿/工作表对象引用单元格更可靠:
' 替换原复制粘贴代码 TxtBk.Sheets("OAA").Range("D4").Copy TmpBk.Sheets("OAA").Range("G4").PasteSpecial Paste:=xlPasteValues
或者更高效的无复制粘贴直接赋值方式:
TmpBk.Sheets("OAA").Range("G4").Value = TxtBk.Sheets("OAA").Range("D4").Value
2. 修正TxtBk的赋值逻辑
原代码Set TxtBk = ActiveWorkbook存在风险:若运行代码时激活的不是目标源工作簿,会导致复制对象错误。建议通过文件名明确指定:
' 替换为你的源工作簿实际文件名 Set TxtBk = Workbooks("SourceData.xlsx")
3. 验证模板工作表名称匹配
确保模板文件UST37.xltx中存在名为OAA的工作表,VBA中工作表名称区分大小写,需完全一致。
完整修正示例代码
Dim wbk As Workbook Dim TxtBk As Workbook Dim TmpBk As Workbook Dim fromPath As String Set wbk = ThisWorkbook ' 明确指定源工作簿 Set TxtBk = Workbooks("你的源工作簿文件名.xlsx") ' 获取并处理模板路径 fromPath = wbk.Sheets("Instructions").Range("A20").Value If Right(fromPath, 1) <> "\" Then fromPath = fromPath & "\" ' 基于模板新建工作簿 Set TmpBk = Workbooks.Add(fromPath & "UST37.xltx") ' 直接赋值传递数据 TmpBk.Sheets("OAA").Range("G4").Value = TxtBk.Sheets("OAA").Range("D4").Value Application.CutCopyMode = False
内容的提问来源于stack exchange,提问作者Thom B
相关产品推荐
相关产品推荐

