我将这个小程序写成了一个更大的项目的一部分,并希望通过在运行代码之前重新激活最后一个活动单元来使其更加用户友好。但是,它给出了运行时错误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
答案 0 :(得分:1)
将Range("OldActiveSheet.OldActiveCell").Activate
替换为
OldActiveSheet.Activate
OldActiveCell.Activate
显然你认为Range("DataRange")
有效,因为你有一个名为DataRange
的Range变量。不,它有效,因为你在某处有named range,名为DataRange
。如果将名称作为字符串传递,Range将不会获取本地变量。没有任何方法或程序。