簡體   English   中英

自動過濾器什么也不返回時如何陷阱

[英]How To Trap when Autofilter returns nothing

我真的不知道該如何命名,但是這里有更深入的描述。 我創建了一個VBA代碼,該代碼將根據某些條件過濾excel文件,然后將條件“匹配”的條件在單元格A中重命名(無論行是什么),我的宏都轉到條件的末尾,然后轉到左側,並將其更改為需要重命名的名稱,然后復制並粘貼到上方。

問題:到目前為止,如果沒有適合該標准的代碼,則代碼會將我的光標或任何東西一直拖到文檔底部,並將重命名從電子表格的底部一直粘貼到頂部。 我認為這是一個簡單的解決方案,這顯然是一個大問題。

這是我的代碼。 預先感謝,這個論壇很棒。

更新:我還附帶了一個示例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

我目前無法下載您的代碼,但是我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

定義此函數后,您可以使用簡單的方法測試是否從邊緣掉落Selection.End(xlDown).SelectSelection.End(xlDown).Select )。

if Selection.Row > lastRowUsed Then Goto NothingFound

然后在代碼的底部創建一個標簽

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

在這里,您可以處理要誘捕的案件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM