VBA跨Sheet保存数据报错:如何同步Page1的Yes/No/NA值到Page2?
解决VBA保存Yes/No/NA字段时的"应用程序定义或对象定义错误"
错误原因
代码中sh.Range("$E:$BC" & n + 1).Value = sh2.Range("$E$7:$E$57")这行存在维度不匹配问题:
- Page1的
E7:E57是51行1列的纵向区域 - Page2的
E(n+1):BC(n+1)是1行51列的横向区域
直接跨维度赋值会触发"应用程序定义或对象定义错误"。
修正后的代码
Option Explicit Sub saveTo() ' 按钮触发的宏用Sub更合适,无需返回值 Dim sh As Worksheet, sh2 As Worksheet ' 修正变量声明,明确类型 Set sh = ThisWorkbook.Sheets("Page2") Set sh2 = ThisWorkbook.Sheets("Page1") Dim n As Long n = sh.Range("A" & Application.Rows.Count).End(xlUp).Row ' 保存基础字段(Date/Time/Ticket/Score) sh.Range("A" & n + 1).Value = sh2.Range("E3") sh.Range("B" & n + 1).Value = sh2.Range("E4") sh.Range("C" & n + 1).Value = sh2.Range("E5") sh.Range("D" & n + 1).Value = sh2.Range("J3") ' 转置纵向区域为横向,匹配目标区域维度 sh.Range("E" & n + 1 & ":BC" & n + 1).Value = Application.Transpose(sh2.Range("E7:E57")) End Sub
额外优化说明
- 变量声明修正:原代码
Dim sh, sh2 As Worksheet仅将sh2声明为Worksheet类型,sh是默认的Variant类型,修正后明确两个变量都是Worksheet类型,避免潜在问题。 - 宏类型调整:将
Function改为Sub,因为按钮触发的宏不需要返回值,符合VBA宏的常规写法。 - 区域转置:通过
Application.Transpose方法将Page1的纵向回答数据转为横向,完美匹配Page2的一行存储结构,解决赋值报错问题。
内容的提问来源于stack exchange,提问作者Shiela
相关产品推荐
相关产品推荐

