關(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ù)期(老趙,如果你看到這里不懂,就自己拆開(kāi)代碼,加上空行空列體會(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)程中所有的努力和希望,都是為了那飛娥撲火的一瞬間?”“飛蛾并不覺(jué)得陰暗,它至少享受了短暫的光明。"
到此這篇關(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-07
VBA 瀏覽文件夾對(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

