2016-02-21 108 views
2

我是一個完整的新手在vba和編碼一般和我一直跟隨vba當然udemy課程。在其中一個練習(動態排序)期間,我不斷收到上述錯誤。在完全跟隨老師的時候被卡住這樣是非常令人沮喪的。任何幫助都是值得讚賞的。VBA錯誤:「運行時錯誤1004:應用程序定義的錯誤或對象定義的錯誤」

Sub Sort() 
' 
' Sort Macro 
' 
ThisWorkbook.Activate 

Range("a2").Select 

'find last row 

mylr = ThisWorkbook.Sheets("sheet1").Cells(Rows.Count, 1).End(x1up).Row 


ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear 
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C2:C5"), _ 
    SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal 

With ActiveWorkbook.Worksheets("Sheet1").Sort 
    .SetRange Range("A1:C5") 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 
End Sub 
+1

什麼行會拋出錯誤?我不想猜。 –

回答

2

我不想讓你遠離課程計劃的流程,但看起來像手動排序操作錄製的代碼非常冗長。實際上,你需要的只是以下內容。

我建議您進入設置VBE的工具►選項►編輯器►Require variable declaration或手動將Option Explicit¹置於每個模塊代碼單頂部的練習。目前,x1up常數被拼寫錯誤。

Sub mySort() 
    ' Sort Macro 

    'reference the workbook and worksheet 
    With ThisWorkbook.Sheets("sheet1") 
     'reference the range to receive the sorting method 
     With .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp).Offset(0, 2)) 
      'sort the cells based on the third column in a descending order 
      .Cells.Sort Key1:=.Columns(3), Order1:=xlDescending, _ 
         Orientation:=xlTopToBottom, Header:=xlYes 
     End With 
    End With 

End Sub 

決不命名子過程同一個保留字。這有效地覆蓋了該命令或常數的功能,以支持較新的名稱。通過命名您的功能Sub Sort(),然後嘗試撥打Range.Sort method您的子程序可以有效嘗試回憶自己。


¹設置要求的VBE的工具中的變量聲明►選項►編輯器屬性頁將把Option Explicit聲明在每個新創建的代碼頁的頂端。這個 將避免像拼寫錯誤那樣的愚蠢的編碼錯誤,並且影響你在變量 聲明中使用正確的變量類型。在沒有聲明的情況下即時創建的變量都是變體/對象類型。使用選項明確是 被廣泛認爲是'最佳實踐'。

+0

謝謝Jeeped!正如我所說我是一個完整的初學者,所以感謝您的耐心和可以理解的迴應。我應該提到我正在做的特別課程是介紹記錄宏功能。這絕不是整個過程的基礎。 –

2

Error in line?

mylr = ThisWorkbook.Sheets("sheet1").Cells(Rows.Count, 1).End(x1up).Row 

順便說一句,myLr用於什麼?

+1

對「1」與「l」問題的好看法。代碼本身有其他主要問題。 –

+0

嗨。查找列中的最後一行。 –

+0

Oke ...找到列中的最後一行。但是因爲你的函數中沒有使用這個值,所以它沒用。錯誤可能來自它。只要刪除那一行,你的功能就OK了。 – Paidjo

相關問題