Vba代碼報(bào)錯(cuò)?
網(wǎng)友解答: '從字面來(lái)分析: bg.Name = Sheet1.Cells(i, l)'其完整寫法如下: bg.Name = Sheet1.Cells(i, l).Value'意思是:工
'從字面來(lái)分析: bg.Name = Sheet1.Cells(i, l)
'其完整寫法如下: bg.Name = Sheet1.Cells(i, l).Value
'意思是:工作表bg的名稱和Sheet1.Cells(i,l)里存儲(chǔ)的值相同
'結(jié)合你前面的代碼:
'If Sheets.Count 1 then這段實(shí)際上就是把除了名稱為"Sheet1"的工作表以外的其他工作表都刪除了。
'下面For each bg In Sheets,這一行實(shí)際就沒(méi)意義了,因?yàn)镾heets里總共就只有一個(gè)成員。
'沒(méi)有文檔,嘗試猜測(cè)一下你的意思:
'1、L記錄用戶輸入的列號(hào),從下文看,L是列號(hào),并不是行
'2、關(guān)閉刪除表時(shí)的提示
'3、刪除除"Sheet1"以外的所有工作表
'4、開(kāi)啟提示,這里應(yīng)該是True
'5、然后重新根據(jù)"Sheet1"的(2-最后行L列)的內(nèi)容新建一系列工作表
'6、然后從Sheet1中篩選數(shù)據(jù),并逐個(gè)存儲(chǔ)到新建的一系列工作表中去
'以下我先抱個(gè)歉:
'1.代碼可讀性實(shí)在是太差了
'2.邏輯上不清楚的地方比較多
'我稍微理一下,僅供參考:
Sub SheetSplit()
Application.ScreenUpdating = False '關(guān)閉屏幕刷新,提高執(zhí)行效率
Dim i&, j&, aRow&
Dim bk As Workbook
Dim sht As Worksheet
Dim shtNew As Worksheet
Set bk = ThisWorkbook
j = InputBox("以哪一列為基準(zhǔn)?")
'刪除工作表
Application.DisplayAlerts = False
For Each sht In bk.Worksheets
If sht.Name < "Sheet1" Then sht.Delete
Next sht
Application.DisplayAlerts = True
'重建工作表
Set sht = bk.Worksheets("Sheet1")
aRow = sht.Range("A" & sht.Rows.Count).End(xlUp).Row
For i = 2 To aRow
If False = SheetExist(bk, sht.Cells(i, L)) Then
Set shtName = bk.Worksheets.Add(After:=bk.Worksheets(bk.Worksheets.Count))
shtNew.Name = sht.Cells(i, j).Value
'實(shí)際可以這么簡(jiǎn)寫,但是新手沒(méi)有判斷能力,不推薦
'bk.Worksheets.Add(After:=bk.Worksheets(bk.Worksheets.Count)).Name = sht.Cells(i, j).Value
End If
Next i
'拆分?jǐn)?shù)據(jù)
For i = 2 To bk.Worksheets.Count
'這里實(shí)在猜不下去了,又來(lái)了一個(gè)"A1:D1943"列,F(xiàn)ield:=4,實(shí)在猜不透想作甚
'算了,繼續(xù)猜,假設(shè)是對(duì)用戶輸入的"L"列做篩選
Set shtNew = bk.Worksheets(i)
sht.Range(sht.Cells(1, 1), sht.Cells(1943, L)).AutoFilter Field:=L, Criterial:=shtNew.Name
sht.Range("A1:" & L & aRow).Copy shtNew.Range("A1") '這兩行代碼未驗(yàn)證,直接抄的你的
Next i
Application.ScreenUpdating = True
End Sub
Function SheetExist(bk As Workbook, ByVal shtName As String) As Boolean
Err.Clear
On Error Resume Next
Dim shtTemp As Worksheet
Set shtTemp = bk.Worksheets(shtName)
SheetExist = (Err.Number = 0)
End Function
網(wǎng)友解答:很明顯引用對(duì)象不存在。