You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

额外优化说明

  1. 变量声明修正:原代码Dim sh, sh2 As Worksheet仅将sh2声明为Worksheet类型,sh是默认的Variant类型,修正后明确两个变量都是Worksheet类型,避免潜在问题。
  2. 宏类型调整:将Function改为Sub,因为按钮触发的宏不需要返回值,符合VBA宏的常规写法。
  3. 区域转置:通过Application.Transpose方法将Page1的纵向回答数据转为横向,完美匹配Page2的一行存储结构,解决赋值报错问题。

内容的提问来源于stack exchange,提问作者Shiela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:57:23