2016-04-25 22 views
0

検索ボックスに入力された文字列を検索するためにマクロを実行するたびに、ランタイムエラー '1004'が表示されます。 RangeクラスのAutoFilterメソッドが失敗しました。私はここでこの問題の答えをしばらく探してみましたが、解決策を提示するものは何もありません。VBAランタイムエラー '1004'。 Rangeクラスのオートフィルタメソッドが失敗しました

「デバッグ」を押すと、コードの下のセクションが強調表示されます。

DataRange.AutoFilter _ 
    Field:=myField, _ 
    Criteria1:=SearchString, _ 
    Operator:=xlAnd 

私はこれが多くの情報ではありませんが、どんな助けも非常に高く評価されることを認識しています。

P.S.私はVBAの完全な初心者で、Excelで検索フィルタを作成する手順をステップバイステップで示したWebサイトのコードをコピーしました。

Sub SearchBox() 

Dim myButton As OptionButton 
Dim SearchString As String 
Dim ButtonName As String 
Dim sht As Worksheet 
Dim myField As Long 
Dim DataRange As Range 
Dim mySearch As Variant 

'Load Sheet into A Variable 
    Set sht = ActiveSheet 

'Unfilter Data (if necessary) 
    On Error Resume Next 
    sht.ShowAllData 
    On Error GoTo 0 

'Filtered Data Range (include column heading cells) 
    Set DataRange = sht.Range("A5:Z40000") 'Cell Range 
    'Set DataRange = sht.ListObjects("Table1").Range 'Table 

'Retrieve User's Search Input 
    mySearch = sht.Shapes("UserSearch").TextFrame.Characters.Text 'Control Form 
    'mySearch = sht.OLEObjects("UserSearch").Object.Text 'ActiveX Control 
    'mySearch = sht.Range("A1").Value 'Cell Input 

'Determine if user is searching for number or text 
    If IsNumeric(mySearch) = True Then 
    SearchString = "=" & mySearch 
    Else 
    SearchString = "=*" & mySearch & "*" 
    End If 

'Loop Through Option Buttons 
    For Each myButton In sht.OptionButtons 
    If myButton.Value = 1 Then 
     ButtonName = myButton.Text 
     Exit For 
    End If 
    Next myButton 

'Determine Filter Field 
    On Error GoTo HeadingNotFound 
    myField = Application.WorksheetFunction.Match(ButtonName, DataRange.Rows(1), 0) 
    On Error GoTo 0 

'Filter Data 
    DataRange.AutoFilter _ 
    Field:=myField, _ 
    Criteria1:=SearchString, _ 
    Operator:=xlAnd 

'Clear Search Field 
    sht.Shapes("UserSearch").TextFrame.Characters.Text = "" 'Control Form 
    'sht.OLEObjects("UserSearch").Object.Text = "" 'ActiveX Control 
    'sht.Range("A1").Value = "" 'Cell Input 

Exit Sub 

'ERROR HANDLERS 
HeadingNotFound: 
    MsgBox "The column heading [" & ButtonName & "] was not found in cells " & DataRange.Rows(1).Address & ". " & _ 
    vbNewLine & "Please check for possible typos.", vbCritical, "Header Name Not Found!" 

End Sub 
+0

は、シート保護されていますか? – Rory

+0

@Roryワークシートは保護されていませんが、SQL Serverとの接続には違いがあります。 – RH56

+0

それでその範囲はテーブルですか?そうであれば、 'Listobject'とその' Autofilter'オブジェクトを使うべきです。 – Rory

答えて

0

myFieldの値をチェックし、あなたの範囲があるので、それは1と26の間でなければなりません - > Z.

+0

'myField'は' Application.WorksheetFunction.Match(ButtonName、DataRange.Rows(1)、0) 'によって設定されます。このようにして、その範囲外にすることはできません。 ... –

関連する問題