2015-03-30 87 views
1

我寫了一個宏,它打開一個包含新數據的CSV文件,複製內容(減去標題行),並將其粘貼到主工作簿中。現在我需要它也排序整個數據集由樣品號(在主表中的所有數據),在列A中給出我試圖2種不同的方法:Excel VBA對一個範圍進行排序

Set rData = ThisWorkbook.Sheets("Data").Range("A1") 
Set rData = Range(rData, rData.End(xlDown).Offset(0, 4)) 
rData.Sort Key1:=Range("A:A"), Order1:=xlAscending, Header:=xlYes 'Debug points here 

此方法返回運行時錯誤1004 :「排序參考無效。」

Set rData = ThisWorkbook.Sheets("Data").Range("A1") 
Set rData = Range(rData, rData.End(xlDown).Offset(0, 4)) 
ThisWorkbook.Sheets("Data").Sort.SortFields.Clear 'Debug points here 
ThisWorkbook.Sheets("Data").Sort.SortFields.Add Key:=Range(_ 
    "A:A"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ 
    xlSortNormal 
With ThisWorkbook.Sheets("Data").Sort 
    .SetRange Range(rData) 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

此方法返回運行時錯誤9:「下標超出範圍」。

+0

哪一行拋出錯誤? – 2015-03-30 18:58:52

+0

我已經添加了對代碼的評論,以顯示哪些行會拋出錯誤。另外,我爲方法2編寫了錯誤代碼,因此已更新。 – 2015-03-30 19:05:59

+0

嘗試'Set rData = Sheets(「Data」)。Range(「A1:D」&Sheets(「Data」)。UsedRange.Rows.Count)'擺脫'Set rData = Range(rData,rData.End xlDown).Offset(0,4))' – user1274820 2015-03-30 19:13:46

回答

1

在SO上也有類似的問題,其答案可能對您有幫助。
'1004': 「The sort reference is not valid.」
Excel VBA Run-Time Error 1004

對於我理解錯誤就出在這裏:Key1:=Range("A:A")也許它更改爲Key1:=Range("A1"),並予以肯定,工作簿和/或工作表引用添加到的範圍內爲好。

+1

將工作簿和工作表引用添加到範圍沒有竅門。謝謝! – 2015-03-30 19:55:28

0

我相信這是在這裏:

Set rData = Range(rData, rData.End(xlDown).Offset(0, 4)) 

試試這個:

Set rData = Range(cells(1,1), cells(4,rData.End(xlDown).Offset(0, 4))) 

*注意,我經常混淆的.cells()的行/列順序,因此,您得來交換他們你的範圍是不正確的。

在這兩種情況下,

Set rData = ThisWorkbook.Sheets("Data").Range("A1") 
Set rData = Range(rData, rData.End(xlDown).Offset(0, 4)) 

是多餘的,在最需要:基於評論

Set rData = Range("a1", rData.End(xlDown).Offset(0, 4)) 

更新:

我認爲這個問題是你如何是指定您的範圍進行排序。文檔說你可以對任何範圍進行排序,包括整個工作表。也可以排序整個表格,因爲這是您獲得的唯一數據,對嗎?

set rdata = thisworkbook.sheets("Data") 
rdata.sort (Key1:=rdata.range("A:A"), Order1:=xlAscending, Header:=xlYes) 
+0

我看不出我的代碼是多餘的。宏有2個工作簿打開,所以我需要我的代碼指向正確的書。另外,我不明白你的最後一行可能會如何工作。你怎麼能'.End(xlDown).Offset(0,4))'從一個尚未設置的變量? – 2015-03-30 19:15:03

+1

是的,好的,有效的分數。我正在查看第二個'Set rData ='語句的第一個範圍,並錯過了第二次使用'rData'的地方。我會採取第二個裂縫... – FreeMan 2015-03-30 19:18:11