2013-06-26 30 views
2

我無法真正弄清楚如何標題這一點,但在這裏深入介紹的多一點。我創建了一個VBA代碼,將根據一定的標準,那麼無論「匹配」這一標準將在小區A(無論排它是)被重命名,我的微距進入到標準的末尾,然後過濾excel文件左邊,並將其更改爲需要重命名的任何內容,然後複製並粘貼到上面。如何捕獲時,自動篩選沒有返回

問題:到目前爲止,如果沒有符合標準的代碼,代碼將使我的光標或任何一直到文檔底部的東西粘貼到電子表格底部的重命名文件中到頂部。這顯然是一個大問題,我覺得有一個簡單的解決方案。

這是我的代碼。在此先感謝,這個論壇真棒。

更新:我還附上一個例子Excel表,其如果通過這個代碼運行(F8一路過關斬將),你就可以看到在何處以及如何發生錯誤。先謝謝你們。

這裏是下載我的文件(Dropbox的)鏈接:https://www.dropbox.com/s/bx4ogcsdbmmzs59/ExcelExample11.xlsm?m

更新:目前我已編輯的代碼這樣:和大多數的時候也不會去否則......爲什麼它繼續當標題列下方的單元格不包含任何內容時?我很困惑。

Range("M1").Select 
ActiveSheet.Range(Selection, Selection.End(xlUp)).AutoFilter Field:=13, Criteria1:="=BCC*" 
If Not Selection.Offset(0, 1) = "" Then 
Selection.End(xlToLeft).Select 
Selection.End(xlDown).Select 
ActiveCell.FormulaR1C1 = "CLO" 
Selection.Copy 
Range(Selection, Selection.End(xlUp)).Select 
ActiveSheet.Paste 
Selection.End(xlUp).Select 
Application.CutCopyMode = False 
ActiveCell.FormulaR1C1 = "'Subtype" 
Else 
ActiveSheet.ShowAllData 
Range("A1").Select 
ActiveSheet.Range(Selection, Selection.End(xlUp)).AutoFilter Field:=1, Criteria1:="#N/A" 
End If 

回答

1

我現在無法下載你的代碼,但我99%肯定,你可以通過在這兩個語句考慮看看解決這個問題:

Selection.End(xlToLeft).Select 
Selection.End(xlDown).Select 

當過濾器沒有返回,其中的第二項將帶您到電子表格的底部。因此,在此聲明之後,您需要測試行號 - 如果您的行號大於所使用的行數,那麼您的「行程結束」。

首先,您需要知道電子表格中最後一個「有效行」是什麼。在你的模塊(或新模塊)的某個地方定義一個函數lastRowUsed像這樣(注意 - 你不能只使用ActiveSheet.UsedRange.Rows.Count,因爲如果第一行是空白的,那麼它將返回<最後一行。 ,可以簡化您的生活一點點):

Option Explicit 

Function lastRowUsed() 
' returns last row used on Active Sheet 
    Dim address As String 
    Dim lastRow As String 
    Dim ii As Integer 

    ' address of range has form $A$2:$C$10 
    address = ActiveSheet.UsedRange.address 
    lastRow = "" 

    ' start at the end and work back until you find a "$" 
    For ii = Len(address) To 1 Step -1 
    If Mid(address, ii, 1) = "$" Then Exit For 
    lastRow = Mid(address, ii, 1) + lastRow 
    Next ii 

    lastRowUsed = Val(lastRow) 

End Function 

一旦你定義了這個功能,你可以測試你是否有一個簡單的

if Selection.Row > lastRowUsed Then Goto NothingFound 

掉下來的邊緣(高於Selection.End(xlDown).Select後右)而在你的代碼的底部,你創建一個標籤

NothingFound: 
    ' code you run when you had "nothing found" 

在這裏,你處理你想陷阱的情況。

+0

這工作完美!!!!!!!謝謝! –

+0

很高興爲你效勞。您可以選擇「接受」答案(解決方案左側的小複選標記)作爲指示解決問題的方法。其他人會看到「問題解決了」,並且更可能不會花時間閱讀問題和答案。而其他有類似問題的人會更快地被引導到解決方案。 – Floris

+0

嘿弗洛里斯,我目前遇到運行此代碼的問題。我已經改變它類似這樣的東西,它不起作用(見OP) –

相關問題