簡體   English   中英

運行時錯誤“1004”--范圍類的自動過濾方法失敗

[英]Run-time Error '1004'-- AutoFilter Method of Range Class Failed

我正在拉一份工作組織報告,並希望按唯一 ID 值查找和過濾。 要過濾的唯一 ID 由通過用戶表單中的文本框輸入的公共屬性指定(此編號用於其他場合,因此它是公共的)。 正在使用的文件是用戶從打開的文件對話框中選擇的動態命名的報告。

  • 用戶輸入他們想要過濾的經理的唯一 ID
  • 使用唯一 ID 查找哪個經理級別列具有唯一 ID
  • 如果未找到 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.

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