[英]Run-time Error '1004'-- AutoFilter Method of Range Class Failed
我正在拉一份工作組織報告,並希望按唯一 ID 值查找和過濾。 要過濾的唯一 ID 由通過用戶表單中的文本框輸入的公共屬性指定(此編號用於其他場合,因此它是公共的)。 正在使用的文件是用戶從打開的文件對話框中選擇的動態命名的報告。
我過濾了 9 個不同的經理級別,AU、AW、AY、BA、BC、BE、BG、BI 和 BK 列,它們都位於第 3 行。因此我有列“A3:BK3”但我僅在 'AU3:BK3' 之間進行過濾以提取較早列中的數據。
問題:我繼續收到“運行時錯誤‘1004’:Range 類的自動篩選方法失敗”,我不知道為什么,即使在嘗試調試之后也是如此。 當使用整個 9 列的測試 ID 時,它適用於某些列,但不適用於其他列。
代碼:
Private Sub EmailButton_Click()
'test WWIDS
'75305 -- 337431 -- 152820578 -- 152821156
Application.ScreenUpdating = False
'Filter by WWID -- Question: How to know who to pull for?
'Filter criteria (Unique ID - WWID), if it does not exist, then move to next, else end/stop
If Len(Trim(Me.EnterWWIDtxtbox.Text)) = 0 Then
Me.EnterWWIDtxtbox.SetFocus
MsgBox "Must provide a Unique ID"
Exit Sub
End If
Dim ws As Worksheet
Dim wb As Workbook
Set wb = Workbooks.Open(Filename:=OpenFileTxt)
Set ws = wb.Worksheets("Sheet1")
With wb.Worksheets("Sheet1")
Dim aColumns() As String
aColumns = Split("AU,AW,AY,BA,BC,BE,BG,BK,BI", ",")
Dim bFound As Boolean
bFound = False
Dim rFound As Range
Dim vColumn As Variant
For Each vColumn In aColumns
Set rFound = ws.Columns(vColumn).Find(WWID, , xlValues, xlPart)
If Not rFound Is Nothing Then
bFound = True
MsgBox "Found [" & WWID & "] in column " & vColumn
With ws.Columns(vColumn)
.AutoFilter 1, rFound.Value
End With
Exit For
End If
Next vColumn
If bFound = False Then MsgBox "Unique ID [" & WWID & "] not found"
End With
我是 VBA 新手,僅供參考,我解決了要學習的問題,但我的答案可能並不完美。
域名注冊地址:
使用: With ws.Range(rFound.Address(False, False))
不With ws.Columns(vColumn)
你有一堆重復的代碼,我試圖削減它們,但由於我不是 100% 的最終目標或事情如何運作,我只能做這么多。 這就是我的結果。
Private Sub EmailButton_Click()
'Get WWID
WWID = "111"
'WWID = "777" ' HardCode for Testing
Dim ws As Worksheet
Dim wb As Workbook
Set wb = ActiveWorkbook
Set ws = wb.ActiveSheet
Dim aColumns() As String
aColumns = Split("AU,AW,AY,BA,BC,BE,BG,BI,BK", ",")
If WWID = "111" Then
Col = "47" 'AU = "47"
End If
AW = "49"
AY = "51"
BA = "53"
BC = "55"
BE = "57"
If WWID = "777" Then
Col = "59" 'BG = "59"
End If
BI = "61"
BK = "63"
ws.AutoFilterMode = False
Dim rFound As Range
Dim vColumn As Variant
For Each vColumn In aColumns
Set rFound = ws.Columns(vColumn).Find(WWID, , xlValues, xlPart)
If Not rFound Is Nothing Then
With ws.Range(rFound.Address(False, False))
.AutoFilter Col, rFound.Value
End With
End If
Next vColumn
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.