我試圖按降序對列進行排序。當我遍歷它時,代碼工作得很好,但是當宏完全運行時,數據不會被排序。我無法弄清楚爲什麼會發生這種情況。以下是代碼位: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
很明顯,這只是整個代碼的一部分。我已經確認lrow
和temp_str
正確計算。此外,在測試代碼時,我確認.Range(temp_str & "1:" & temp_str & lrow).Select
抓住了我想要分類的全部範圍。什麼可以防止代碼在宏的全面運行期間工作?
爲了給出更多的上下文,我們稱之爲「DOX」來填充文件/對列進行排序僅從另一個子類中調用(我們稱之爲「Master」)。當我自己運行DOX sub時,排序完美。我正在使用Excel 2010.
我測試了代碼並且運行正常(使用調試器並單獨運行)。我能想到的唯一的事情是,如果由於某種隨機原因,有來自另一個子組的剩餘物(因爲您稱它爲被調用)。自動過濾器可能會干擾(設置.AutoFilterMode = False,激活DOX_ws工作表)或過濾器的表單保護。 – Sgdva
嘗試在'ConvertToLetter'中限定'cells'獲得'split'嗎? – findwindow
'.AutoFilterMode = False'沒有運氣,運行Master子時仍未排序。 'ConvertToLetter'函數工作得很好 - 它返回所期望的(在這種情況下爲「K」)。 – kschindl