2015-03-30 2 views
0

Привет, здесь очень много нового для макросов Excel, работающих на одном из них, который сортируется с использованием автофильтра. Он отлично работает и делает то, что я хочу, только когда я пытаюсь прибегнуть к данным, которые он показывает, в неправильном листе. Во всяком случае вот мой макросЭкземпляр макроса вызывает странное поведение

Sub Hide_Unassigned() 
Worksheets("Resource View (2)").Activate 
Dim LastRow As Long, c As Range 
Application.EnableEvents = False 
LastRow = Cells(Cells.Rows.Count, "D").End(xlUp).Row 

ActiveWorkbook.Worksheets("Master Data").AutoFilter.Sort.SortFields.Clear 
ActiveWorkbook.Worksheets("Master Data").AutoFilter.Sort. _ 
    SortFields.Add Key:=Range("Z1:Z200"), SortOn:=xlSortOnValues, Order:= _ 
    xlDescending, DataOption:=xlSortNormal 
     With ActiveWorkbook.Worksheets("Master Data").AutoFilter.Sort 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 
On Error Resume Next 
For Each c In Range("D1:D" & LastRow) 
If c.Value = "Unassigned" Then 
    c.EntireRow.Hidden = True 
Else 
    c.EntireRow.Hidden = False 
End If 

Next 
    ActiveWorkbook.Worksheets("Master Data").AutoFilter.Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("Master Data").AutoFilter.Sort. _ 
    SortFields.Add Key:=Range("D1:D200"), SortOn:=xlSortOnValues, Order:= _ 
    xlAscending, DataOption:=xlSortNormal 
     With ActiveWorkbook.Worksheets("Master Data").AutoFilter.Sort 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 
On Error GoTo 0 
Application.EnableEvents = True 
End Sub 

Как я сказал, что все работает нормально, за исключением, когда я пытаюсь заново сортировать данные в основных данных он показывает в представлении ресурсов (2) листа. Затем его можно удалить, просто перетащив его, но я не думаю, что это достаточно.

Заранее спасибо за любые предложения или помочь

ответ

0

Если бы волне мозга и сумели разобраться в этом самом, просто перемещая последнюю часть макроса будет вызвана, когда я сам доступом к лист основных данных.

+0

Рад, что вы отсортировали его! Два предложения: 1) Отправьте свой фиксированный код здесь в своем ответе (отредактируйте его и вставьте в него), чтобы другие могли воспользоваться вашими изменениями. 2) Я по-прежнему рекомендую вам уйти от «Active *» (как я рекомендовал в своем ответе), потому что он устранит такие проблемы. – FreeMan

0

Не использовать Active(anything). Это то, что произойдет, когда вы это сделаете.

Добавить:

Dim MstrDataWS as Worksheet 
Dim ResWS as Worksheet 
Set ResWS = Worksheets("Resource View (2)") 
Set MstrDataWS = ActiveWorkbook.Worksheets("Master Data") 

Затем, каждый раз, когда вы хотите сослаться на один рабочий лист или другой, используйте MstrDataWS или ResWS, в зависимости от обстоятельств. Это гарантирует, что вы ссылаетесь на правильный лист. Он также позволяет устранить все ссылки на .Activate и .Select.

Кроме того, Cells() и Range() относятся к тому, что является активным листом, поэтому вы можете потеряться там. Откорректируйте эти команды для использования ResWS.Cells() или MstrDataWS.Cells(), если необходимо.

+0

Прохладный спасибо за помощь, которую я только что записывал свои действия и составлял основу макроса таким образом, и поэтому у меня есть все активные вещи. Любой шанс, что вы могли бы рассказать мне, как поиск индекса и соответствия функции. это сверху вниз или снизу вверх, у меня есть функция, использующая это, чтобы заполнить поле после того, как вышеуказанная сортировка будет выполнена, но, похоже, возвращает другой ответ в поле каждый раз, просто пытаясь разгадать проблему. – user3456401

+0

Yup , это по умолчанию код типа макрорекордера. Ничего плохого в том, чтобы начать с этого, это отличный способ узнать. Просто помните об опасностях «Active *» и удаляйте эти биты после записи. Ваши вопросы 'Index()' и 'Match()' являются хорошими, и у меня нет ответа на этот вопрос. Звучит как хороший корм для совершенно нового вопроса! – FreeMan

Смежные вопросы