对象'_Global'的方法'范围'失败 - 重新激活以前的ActiveCell

时间:2013-01-01 14:41:39

标签: excel-vba vba excel

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

我设法重新激活了之前的ActiveWorksheet,但是如何让它重新激活实际的单元格呢?我在这里查看了讨论:Run-time error '1004' : Method 'Range' of object'_Global' failed

这让我觉得问题与我引用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

1 个答案:

答案 0 :(得分:1)

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

OldActiveSheet.Activate
OldActiveCell.Activate

显然你认为Range("DataRange")有效,因为你有一个名为DataRange的Range变量。不,它有效,因为你在某处有named range,名为DataRange。如果将名称作为字符串传递,Range将不会获取本地变量。没有任何方法或程序。