2013-01-01 45 views
0

我編寫了這個小程序作爲更大項目的一部分,並希望通過在運行之前重新激活最後一個活動單元來使其更加用戶友好代碼。但是,它給了我運行時錯誤1004:對象'_Global'的方法'範圍'失敗。對象'_Global'的方法'範圍'失敗 - 重新激活以前的ActiveCell

我設法重新激活之前的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

您可能也想閱讀本文? http://stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select –

回答

1

更換Range("OldActiveSheet.OldActiveCell").Activate

OldActiveSheet.Activate 
OldActiveCell.Activate 

顯然,你以爲Range("DataRange")作品,因爲你有一個名爲DataRange範圍變量。不,它的工作原理是因爲您的某個地方有named range,名稱爲DataRange。如果您將其名稱作爲字符串傳遞,Range不會選取您的本地變量。沒有任何方法或程序會。

+0

謝謝,這解決了它 - 看起來像我試圖過分複雜的事情! :) – Matthias

相關問題