关于vba代码运行时错误1004 应用程序定义或对象定义错误问题

 更新时间:2022年10月11日 14:30:23   作者:用余生去守护  
这篇文章主要介绍了vba代码运行时错误1004 应用程序定义或对象定义错误,经过一系列问题调查发现是工作表中数据存在异常,需要的朋友可以参考下

前言

一、错误描述

将Excel所有工作表,汇总到一个工作表中:

在thisworkbook中运行如下:

Sub 合并所有工作表_在所有行标注工作表名字_无视空行空列_考虑到不规范的多一点的行和列()
    Dim row_num As Long, column_num As Long, row_num_temp As Long, column_num_temp As Long, row_num_merge As Long, column_num_merge As Long, i As Long, arr() As Long
    Worksheets.Add.Name = "合并表"
    Sheets("合并表").Move before:=Sheets(1)
    For i = 2 To Worksheets.Count
        Worksheets(i).Activate
        'UsedRange.row,代表使用的第一个行数,在有空行的时候体现,同理,UsedRange.column,代表使用的第一个列数,在有空列的时候体现
        '那么使用第一行 + 已使用的行数,这样可以规避顶部/左侧有空行,导致获取已使用行号的数据不符合预期(老赵,如果你看到这里不懂,就自己拆开代码,加上空行空列体会一下)
        row_num = Worksheets(i).UsedRange.Row + Worksheets(i).UsedRange.Rows.Count - 1
        column_num = Worksheets(i).UsedRange.Column + Worksheets(i).UsedRange.Columns.Count - 1
        '如果格式很不规范,那么获取的UsedRange.rows.count就可能是整个表格的行数,所以要规避这种情况,如果相同,就让他减1
        If row_num = Worksheets(i).Rows.Count Then row_num = row_num - 1
        If column_num = Worksheets(i).Columns.Count Then column_num = column_num - 1
        
        '相当于遍历所有的列,都按ctrl + ↑,取数组的最大值
        ReDim arr(1 To column_num)
        For j = LBound(arr) To UBound(arr)
            row_num_temp = Worksheets(i).Cells(row_num + 1, j).End(xlUp).Row
            arr(j) = row_num_temp
        Next
        Debug.Print (Application.WorksheetFunction.Max(arr))
        row_num_temp = Application.WorksheetFunction.Max(arr) '赋予最大值,确定最大的有数据的行数
        
        '相当于遍历所有的行,都按ctrl + ←,取数组的最大值
        'Erase arr 清空数组,但是也可以不用,直接用ReDim也可以,如果要保留数组内容,需要加一个preserve
        ReDim arr(1 To row_num_temp)
        For j = LBound(arr) To UBound(arr)
            column_num_temp = Worksheets(i).Cells(j, column_num + 1).End(xlToLeft).Column
            arr(j) = column_num_temp
        Next
        Debug.Print (Application.WorksheetFunction.Max(arr))
        column_num_temp = Application.WorksheetFunction.Max(arr) '赋予最大值,确定最大的有数据的列数
        
        Worksheets(i).Range(Cells(1, 1), Cells(row_num_temp, column_num_temp)).Select
        Selection.Copy Sheets("合并表").Cells(row_num_merge + 1, 2)
        Worksheets("合并表").Cells(row_num_merge + 1, 1) = Worksheets(i).Name
        row_num_merge = Sheets("合并表").UsedRange.Rows.Count
    Next
    '将首行标题转为所有行(选择空值,=上面的数据)
    Worksheets("合并表").Activate
    Columns("A:A").Select
    Selection.SpecialCells(xlCellTypeBlanks).Select
    Application.CutCopyMode = False
    Selection.FormulaR1C1 = "=R[-1]C"
    Columns("A:A").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A1").Select
End Sub

在这里插入图片描述

新建模块,运行如下:

在这里插入图片描述

二、原因调查

发现是工作表中数据存在异常,例如:

在这里插入图片描述

最下面存在个别数据,导致复制粘贴的时候单元格数量不足,形成此错误;

总结

分享:
“难道生命这漫长进程中所有的努力和希望,都是为了那飞娥扑火的一瞬间?”“飞蛾并不觉得阴暗,它至少享受了短暂的光明。"

到此这篇关于关于vba代码运行时错误1004 应用程序定义或对象定义错误问题的文章就介绍到这了,更多相关vba运行时错误1004内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • VBA UsedObjects 集合用法

    VBA UsedObjects 集合用法

    可用 Application 对象的 UsedObjects 属性返回一个 UsedObjects 对象。
    2009-07-07
  • vba将excel按照某一列拆分成多个文件

    vba将excel按照某一列拆分成多个文件

    本文主要介绍了vba将excel按照某一列拆分成多个文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2023-01-01
  • VBA中的循环代码的使用

    VBA中的循环代码的使用

    本文主要介绍了VBA中的循环代码的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Excel VBA指定条件删除整行整列的实现

    Excel VBA指定条件删除整行整列的实现

    本文主要介绍了Excel VBA指定条件删除整行整列的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • VBA 编程基础

    VBA 编程基础

    好多朋友想学习vba但相关资料不是很多,其实就是利用了vb的语法,结合office
    2009-07-07
  • 向数据报表添加一个合计字段

    向数据报表添加一个合计字段

    在数据环境设计器中也可以创建一个合计字段,即对来自部分的数据进行合计的字段。
    2009-07-07
  • excel vba 高亮显示当前行代码

    excel vba 高亮显示当前行代码

    用条件格式设置高亮显示当前行,难的是如何确定当前行。用VBA就很简单,鼠标右击工作表标签,选择“查看代码”,将下面的代码粘贴到VBE窗口中
    2009-07-07
  • VBA将excel数据表生成JSON文件

    VBA将excel数据表生成JSON文件

    本文给大家汇总介绍了几种使用VBA处理EXCEL并生成JSON文件的方法和思路,非常的实用,有需要的小伙伴可以参考下。
    2015-09-09
  • VBA 浏览文件夹对话框调用的几种方法

    VBA 浏览文件夹对话框调用的几种方法

    VBA 浏览文件夹对话框调用实现代码。大家可以根据需要选择。
    2009-07-07
  • 用vba实现将记录集输出到Excel模板

    用vba实现将记录集输出到Excel模板

    用vba实现将记录集输出到Excel模板...
    2007-02-02

最新评论