關(guān)于vba代碼運(yùn)行時(shí)錯(cuò)誤1004?應(yīng)用程序定義或?qū)ο蠖x錯(cuò)誤問(wèn)題
前言
一、錯(cuò)誤描述
將Excel所有工作表,匯總到一個(gè)工作表中:
在thisworkbook中運(yùn)行如下:
Sub 合并所有工作表_在所有行標(biāo)注工作表名字_無(wú)視空行空列_考慮到不規(guī)范的多一點(diǎn)的行和列() 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,代表使用的第一個(gè)行數(shù),在有空行的時(shí)候體現(xiàn),同理,UsedRange.column,代表使用的第一個(gè)列數(shù),在有空列的時(shí)候體現(xiàn) '那么使用第一行 + 已使用的行數(shù),這樣可以規(guī)避頂部/左側(cè)有空行,導(dǎo)致獲取已使用行號(hào)的數(shù)據(jù)不符合預(yù)期(老趙,如果你看到這里不懂,就自己拆開代碼,加上空行空列體會(huì)一下) row_num = Worksheets(i).UsedRange.Row + Worksheets(i).UsedRange.Rows.Count - 1 column_num = Worksheets(i).UsedRange.Column + Worksheets(i).UsedRange.Columns.Count - 1 '如果格式很不規(guī)范,那么獲取的UsedRange.rows.count就可能是整個(gè)表格的行數(shù),所以要規(guī)避這種情況,如果相同,就讓他減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 '相當(dāng)于遍歷所有的列,都按ctrl + ↑,取數(shù)組的最大值 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) '賦予最大值,確定最大的有數(shù)據(jù)的行數(shù) '相當(dāng)于遍歷所有的行,都按ctrl + ←,取數(shù)組的最大值 'Erase arr 清空數(shù)組,但是也可以不用,直接用ReDim也可以,如果要保留數(shù)組內(nèi)容,需要加一個(gè)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) '賦予最大值,確定最大的有數(shù)據(jù)的列數(shù) 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 '將首行標(biāo)題轉(zhuǎn)為所有行(選擇空值,=上面的數(shù)據(jù)) 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
新建模塊,運(yùn)行如下:
二、原因調(diào)查
發(fā)現(xiàn)是工作表中數(shù)據(jù)存在異常,例如:
最下面存在個(gè)別數(shù)據(jù),導(dǎo)致復(fù)制粘貼的時(shí)候單元格數(shù)量不足,形成此錯(cuò)誤;
總結(jié)
分享:
“難道生命這漫長(zhǎng)進(jìn)程中所有的努力和希望,都是為了那飛娥撲火的一瞬間?”“飛蛾并不覺得陰暗,它至少享受了短暫的光明。"
到此這篇關(guān)于關(guān)于vba代碼運(yùn)行時(shí)錯(cuò)誤1004 應(yīng)用程序定義或?qū)ο蠖x錯(cuò)誤問(wèn)題的文章就介紹到這了,更多相關(guān)vba運(yùn)行時(shí)錯(cuò)誤1004內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Excel?VBA指定條件刪除整行整列的實(shí)現(xiàn)
本文主要介紹了Excel?VBA指定條件刪除整行整列的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01向數(shù)據(jù)報(bào)表添加一個(gè)合計(jì)字段
在數(shù)據(jù)環(huán)境設(shè)計(jì)器中也可以創(chuàng)建一個(gè)合計(jì)字段,即對(duì)來(lái)自部分的數(shù)據(jù)進(jìn)行合計(jì)的字段。2009-07-07VBA 瀏覽文件夾對(duì)話框調(diào)用的幾種方法
VBA 瀏覽文件夾對(duì)話框調(diào)用實(shí)現(xiàn)代碼。大家可以根據(jù)需要選擇。2009-07-07用vba實(shí)現(xiàn)將記錄集輸出到Excel模板
用vba實(shí)現(xiàn)將記錄集輸出到Excel模板...2007-02-02