2016-12-04 4 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 

Итак, я выбора диапазона на основе адреса р д Какие 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 может быть, вы можете мне помочь. Я хочу найти E15 в WsOutput, и когда он его найдет, я скрою все остальные столбцы. Не знаю, как написать это, я много раз пробовал. –

+0

Добро пожаловать. Что касается другой проблемы, я бы установил для всех столбцов 'UserdRange'' Hidden' значение 'True', а затем установил для найденного элемента ячейки' Hidden' значение 'False. Если вам не удастся сделать новый пост с вашими усилиями по кодированию – user3598756