0

作为一个更大项目的一部分,我编写了这个小程序,并希望通过在运行代码之前重新激活最后一个活动单元格来使其更加用户友好。但是,它给了我运行时错误 1004:对象“_Global”的方法“范围”失败。

我设法重新激活了以前的 ActiveWorksheet,但是如何让它重新激活实际的单元格?我在这里查看了讨论:运行时错误'1004':对象'_Global'的方法'范围'失败

这使我认为问题出在我引用 的方式上OldActiveCell,但我仍然找不到解决方案。

有谁知道这个问题的答案?下面的代码:

Sub SortData()
    'Sorts Data on Input Sheet; first after project ID and then position type
    Dim DataRange As Range
    Dim OldActiveSheet As Object
    Dim OldActiveCell As Object

    'Define variable for currently active cell to reactivate it afterwards
    Set OldActiveSheet = ActiveSheet
    Set OldActiveCell = ActiveCell
    Sheets("Input").Activate

    Range("DataRange").Activate
        ActiveSheet.Sort.SortFields.Clear
        'First filter criterium
        ActiveSheet.Sort.SortFields.Add Key:=Range("ProjectList") _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        'Second filter criterium
        ActiveSheet.Sort.SortFields.Add Key:=Range("PositionType") _
            , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        'Loop through and sort
        With ActiveSheet.Sort
            .SetRange Range("DataRange")
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    'Reactivate previous active cell
    Range("OldActiveSheet.OldActiveCell").Activate
End Sub
4

1 回答 1

1

替换Range("OldActiveSheet.OldActiveCell").Activate

OldActiveSheet.Activate
OldActiveCell.Activate

显然您认为Range("DataRange")有效,因为您有一个 Range 变量名为DataRange. 不,它有效,因为您在某处有一个命名范围DataRange,命名为. 如果您将它们的名称作为字符串传递,Range 将不会获取您的局部变量。任何方法或程序都不会。

于 2013-01-01T14:46:33.887 回答