[VBA][Error1004]Sheet.cells.value引起的应用程序定义或对象定义错误

本文描述在使用VBA进行Excel操作时,遇到的应用程序定义或对象定义错误问题,该问题在尝试使用Sheet.Cells().Value进行数据写入时出现。解决方法是改为使用Sheet.Cells().Value2属性,此更改避免了错误的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[VBA][Error1004]Sheet.cells.value引起的"应用程序定义或对象定义错误"

问题描述

将数据处理结果写入到结果Sheet时,最初使用Sheet.cells().value = date,突然弹出

在这里插入图片描述
很莫名其妙, 写入前30几条记录时并不会出错。 网上没能找到原因及解决办法。
#解决办法:**
具体发生的原因,至今仍不清楚。
通过观察cell对象的构成,发现单元格的内容存储在value2成员中
在这里插入图片描述
所以改成Sheet.cells().value2 = date, 不再报错。
PS. 这个问题之前应该也碰到过, 也是这么解决的, 只不过太久不用一次VBA忘记了, 耽误了几个小时的时间,这次记下来。

在上述代码的基础上增添以下模块:Sub CreateSummarySheet() On Error GoTo ErrorHandler Application.ScreenUpdating = False ' 检查统计表和汇总分析表是否存在 Dim statSheet As Worksheet, analysisSheet As Worksheet Dim summarySheet As Worksheet Dim sheetExists As Boolean: sheetExists = True On Error Resume Next Set statSheet = ThisWorkbook.Sheets("卫星节目故障统计表") Set analysisSheet = ThisWorkbook.Sheets("卫星节目汇总分析表") On Error GoTo 0 If statSheet Is Nothing Or analysisSheet Is Nothing Then MsgBox "未找到统计表和汇总分析表,请先运行生成报告程序", vbExclamation Exit Sub End If ' 删除旧的数据统计汇总表(如果存在) Application.DisplayAlerts = False On Error Resume Next ThisWorkbook.Sheets("数据统计汇总表").Delete On Error GoTo 0 Application.DisplayAlerts = True ' 创建新的数据统计汇总表 Set summarySheet = ThisWorkbook.Sheets.Add(After:=analysisSheet) summarySheet.Name = "数据统计汇总表" ' ==== 步骤0:设置表头 ==== With summarySheet.Range("A1:E1") .Merge .Value = statSheet.Range("A1").Value ' 复制统计表第一行内容 .Font.Bold = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With ' ==== 步骤1:创建标题行 ==== summarySheet.Range("A2:E2") = Array("序号", "影响卫星", "对应节目", "节目数量", "节目数量合计") summarySheet.Rows(2).Font.Bold = True summarySheet.Range("A2:E2").HorizontalAlignment = xlCenter ' ==== 步骤2-3:收集卫星和节目数据 ==== Dim lastStatRow As Long lastStatRow = statSheet.Cells(statSheet.Rows.Count, "A").End(xlUp).Row ' 使用字典存储卫星和对应的节目集合 Dim satelliteDict As Object Set satelliteDict = CreateObject("Scripting.Dictionary") Dim r As Long For r = 3 To lastStatRow Dim satellite As String, program As String satellite = statSheet.Cells(r, 1).Value ' A列: 影响卫星 program = statSheet.Cells(r, 2).Value ' B列: 影响节目 ' 添加卫星到字典 If Not satelliteDict.Exists(satellite) Then satelliteDict.Add satellite, CreateObject("Scripting.Dictionary") End If ' 添加节目到卫星对应的字典(自动去重) satelliteDict(satellite)(program) = True Next r ' ==== 步骤4-6:填充数据 ==== Dim summaryRow As Long: summaryRow = 3 Dim satellites() As Variant satellites = satelliteDict.Keys ' 步骤5:填充序号 For i = 0 To UBound(satellites) summarySheet.Cells(summaryRow, 1) = i + 1 ' 序号 summaryRow = summaryRow + 1 Next i ' 填充卫星、节目和节目数量 summaryRow = 3 Dim totalPrograms As Long: totalPrograms = 0 For Each satellite In satellites ' 步骤3:填充影响卫星 summarySheet.Cells(summaryRow, 2) = satellite ' 步骤3:合并节目名称 Dim programs() As Variant programs = satelliteDict(satellite).Keys Dim programStr As String programStr = Join(programs, "、") summarySheet.Cells(summaryRow, 3) = programStr ' 步骤4:计算节目数量 Dim programCount As Long programCount = satelliteDict(satellite).Count summarySheet.Cells(summaryRow, 4) = programCount totalPrograms = totalPrograms + programCount summaryRow = summaryRow + 1 Next satellite ' 步骤6:添加节目数量合计 Dim lastSummaryRow As Long lastSummaryRow = summarySheet.Cells(summarySheet.Rows.Count, "A").End(xlUp).Row With summarySheet.Range("E3:E" & lastSummaryRow) .Merge .Value = totalPrograms .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With ' ==== 步骤7:设置格式 ==== summarySheet.Columns("A:E").AutoFit summarySheet.Cells.HorizontalAlignment = xlCenter summarySheet.Cells.VerticalAlignment = xlCenter ' 设置边框 With summarySheet.Range("A2:E" & lastSummaryRow).Borders .LineStyle = xlContinuous .Weight = xlThin End With ' 冻结标题行 summarySheet.Activate summarySheet.Range("A3").Select ActiveWindow.FreezePanes = True Application.ScreenUpdating = True MsgBox "数据统计汇总表创建完成!", vbInformation Exit Sub ErrorHandler: MsgBox "错误 " & Err.Number & ": " & Err.Description, vbCritical, "创建汇总表时出错" Application.ScreenUpdating = True End Sub
07-10
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值