Excel宏导致奇怪的行为

时间:2015-03-30 14:59:51

标签: excel vba excel-vba autofilter

对于我在这里使用自动过滤器进行排序的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)表中。然后可以通过拖动它来删除它,但我认为这不够。

提前感谢任何建议或帮助

2 个答案:

答案 0 :(得分:0)

当我访问主数据表本身时,通过简单地移动要调用的宏的最后部分,我就有了脑电波并设法对其进行排序。

答案 1 :(得分:0)

请勿使用Active(anything)。这就是你做的事情。

添加:

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

然后,每次要引用一个工作表或其他工作表时,请根据需要使用MstrDataWSResWS。这将确保您引用正确的工作表。它还允许您删除对.Activate.Select的所有引用。

此外,Cells()Range()指的是活动表格中的任何内容,因此您可能会迷失在那里。根据需要调整这些命令以使用ResWS.Cells()MstrDataWS.Cells()