2016-12-04 29 views
0

我的代碼是給了一個錯誤」 1004:。Range類的選擇方法失敗程不選擇VBA

Sub AdvencedFilterNew() 
' 
' AdvencedFilterNew Macro 
' 

    Dim WsOutput As Worksheet 
    Dim WsMain As Worksheet 
    Dim wsScenarios As Worksheet 
    Dim ScenarioIDrow As Long 
    Dim ScenarioIDColumn As Long 
    Dim rgn As Range 
    Dim p As String 
    Dim q As String 

    Range("E15").Select 
    Range("E17:Q350").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ 
    Range("E14:Q15"), Unique:=False 

    Set WsOutput = Worksheets("Output") 
    Set WsMain = Worksheets("Main Menu") 
    Set wsScenarios = Worksheets("Scenarios.New") 

    ScenarioIDrow = WsOutput.Cells.Find("Scenario ID").Row 
    ScenarioIDColumn = WsOutput.Cells(ScenarioIDrow, Columns.Count).End(xlToLeft).Column 
    p = wsScenarios.Cells(ScenarioIDrow, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False) 
    q = wsScenarios.Cells(ScenarioIDrow, ScenarioIDColumn).Address(RowAbsolute:=False, ColumnAbsolute:=False) 

    If WsMain.Range("E15") > 0 Then 

    WsOutput.Range(p, q).Select 
    WsMain.Cells.Find("E15").Select 
    Else 
    End If 

End Sub 

所以,我基於p的Q中的地址的選擇範圍哪些是A22和ATX22。我不知道爲什麼我可以選擇它,它用在我使用的其他代碼中,另一個問題是,如果數字是4,它也會找到其他所有包含4的數字,例如1014,1024等等。我在這裏?謝謝!

+0

'Range.Find'方法根據其內容找不到地址。 https://msdn.microsoft.com/en-us/library/office/ff839746.aspx所以我相信你想'WsMain.Range(「E15」)'你在哪裏使用'WsMain.Cells.Find(「E15」) ' – JamesFaix

+0

謝謝詹姆斯,你是對的! –

回答

1

這是因爲你必須在Activate工作表中選擇任何範圍之前

WsOutput.Range(p, q).Select 
WsMain.Activate 
WsMain.Cells.Find("E15").Select 
+0

謝謝!你是對的! –

+0

user3598756也許你可以幫助我。我想在WsOutput中找到E15,當它找到它時,我隱藏所有其他列。不知道如何寫,我多次嘗試。 –

+0

不客氣。至於另一個問題,我會將所有'UserdRange'列'Hidden'屬性設置爲'True',然後將找到的單元格列'Hidden'屬性設置爲'False。如果你沒有成功通過你的編碼努力做出新的職位 – user3598756