2016-06-09 22 views
1

我試圖按降序對列進行排序。當我遍歷它時,代碼工作得很好,但是當宏完全運行時,數據不會被排序。我無法弄清楚爲什麼會發生這種情況。以下是代碼位:VBA - 降序排序僅在單步執行代碼時起作用

Dim temp_str as String 
Dim lrow as Long 
Dim DOX_Net_Lvl_Col_Loc as Long 
Dim DOX_ws as WorkSheet 
Set DOX_ws = ThisWorkbook.Sheets("DOX") 

' Sort Netting Level in descending order 
With DOX_ws 
    .Activate 
    temp_str = ConvertToLetter(DOX_Net_Lvl_Col_Loc) 
    .Range(temp_str & "1:" & temp_str & lrow).Sort _ 
     Key1:=.Range(temp_str & "1"), Order1:=xlDescending 
End With 

Function ConvertToLetter(ColNo As Long) As String 
    ConvertToLetter = Split(Cells(, ColNo).Address, "$")(1) 
End Function 

很明顯,這只是整個代碼的一部分。我已經確認lrowtemp_str正確計算。此外,在測試代碼時,我確認.Range(temp_str & "1:" & temp_str & lrow).Select抓住了我想要分類的全部範圍。什麼可以防止代碼在宏的全面運行期間工作?

爲了給出更多的上下文,我們稱之爲「DOX」來填充文件/對列進行排序僅從另一個子類中調用(我們稱之爲「Master」)。當我自己運行DOX sub時,排序完美。我正在使用Excel 2010.

+0

我測試了代碼並且運行正常(使用調試器並單獨運行)。我能想到的唯一的事情是,如果由於某種隨機原因,有來自另一個子組的剩餘物(因爲您稱它爲被調用)。自動過濾器可能會干擾(設置.AutoFilterMode = False,激活DOX_ws工作表)或過濾器的表單保護。 – Sgdva

+0

嘗試在'ConvertToLetter'中限定'cells'獲得'split'嗎? – findwindow

+0

'.AutoFilterMode = False'沒有運氣,運行Master子時仍未排序。 'ConvertToLetter'函數工作得很好 - 它返回所期望的(在這種情況下爲「K」)。 – kschindl

回答

2

我想出了一個解決方案。如果我將範圍更改爲.Range("A1:" & temp_str & lrow).Sort,那麼它可以工作。我想它需要整個範圍的數據來執行排序;顯然,只給它專欄是不夠的。

+0

lololol XD幹得好^ __ ^ – findwindow