2012-06-27 18 views
0

我使用下面的代碼,試圖刪除整個行,當它在特定的「名稱」列小於4個字符列刪除行。 (即第1行標題爲NAME的列)數據庫當前有大約10,000行。我知道現在的代碼很接近,但在運行時出現VB錯誤。我想我可能是通過錯誤的名稱來搜索特定的列。宏從具有小於4個字符

Sub Macro2() 

' Macro to delete rows if there are less than 4 in the NAME column 

    Dim LR As Long, i As Long 
    Application.ScreenUpdating = False 
    LR = Range("NAME" & Rows.Count).End(xlUp).Row 
    For i = LR To 1 Step -1 
     If Len(Range("NAME" & i).Value) < 4 Then Rows(i).Delete 
    Next i 
    Application.ScreenUpdating = True 

End Sub 

編輯:我收到VBA錯誤的下面一行:

LR = Range("NAME" & Rows.Count).End(xlUp).Row 
+3

我不能得到什麼這個名字的事情,因爲你可能不會有這麼多的命名範圍?有兩種選擇:檢查範圍時你的代碼是錯誤的(最好使用'.Cells(i,j)'或者你最好檢查你的命名範圍是否存在 – JMax

+1

是否是特定列中的「NAME」單元格?它總是一樣的嗎?我會直接引用該值,就像@JMax所描述的那樣,使用'.Cells(i,j)'或'.Range(「A」&Row)'。 – Gaffi

+0

什麼是錯誤?發生在? –

回答

5

正如其他人在上述評論都提到,你的發言

LR = Range("NAME" & Rows.Count).End(xlUp).Row 

而且,

Len(Range("NAME" & i).Value) 

只是不在給定的程序中對VBA沒有任何意義,因爲它們相當於說。

Range(Name81).Value '81 is a random number 

,除非你在你的工作簿稱爲Name81(或任何其他數字)有一個定義的名稱代碼會產生一個運行時錯誤。

我覺得這讓你想你想:

Sub Macro2() 

' Macro to delete rows if there are less than 4 in the NAME column 

    Dim LR As Long, i As Long, lngCol as Long 

    lngCol = Rows(1).Find("NAME",lookat:=xlWhole).Column 'assumes there will always be a column with "NAME" in row 1 

    Application.ScreenUpdating = False 


    LR = Cells(Rows.Count, lngCol).End(xlUp).Row 

    For i = LR To 1 Step -1 

     If Len(Cells(i, lngCol).Value) < 4 Then Rows(i).Delete 

    Next i 

    Application.ScreenUpdating = True 

End Sub 
+0

我得到一個運行時錯誤'1004'''方法'範圍'object'_Global'失敗。 這是發生在這條線:'LR =細胞(Rows.Count,範圍(myRange).COLUMN).END(xlUp).Row' – Jonny

+0

你有一個定義的名稱爲**姓名**工作表上/中你的工作簿?如果不是,請將'myRange ='NAME''更改爲'myRange ='[無論您需要什麼名稱]'''。如果你只需要一個特定的列,例如,你可以對C列使用'myRange =「C1」',但是如果你想要引用特定的列,我會重寫代碼a位有所不同。 –

+0

我正在尋求刪除只有「NAME」列中找不到四個字符的行。 (NAME是列標題)它只是一個工作表。在使用此特定列時如何重新編寫代碼? PS。感謝您最近的幫助。 – Jonny

相關問題