【发布时间】:2016-06-10 04:50:05
【问题描述】:
我正在尝试按降序对列进行排序。当我单步执行代码时,代码工作得很好,但是当宏完全运行时,数据没有排序。我无法弄清楚为什么会这样。这是一段代码:
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
显然,这只是整体代码的一个 sn-p。我已经确认lrow 和temp_str 计算正确。此外,在测试代码时,我确认.Range(temp_str & "1:" & temp_str & lrow).Select 抓取了我想要排序的全部范围。什么会阻止代码在宏完全运行期间工作?
为了提供更多上下文,填充文件/排序列的子(我们称之为“DOX”)仅从不同的子(我们称之为“主”)调用。当我自己运行 DOX 子程序时,排序工作得很好。我正在使用 Excel 2010。
【问题讨论】:
-
我测试了代码并且运行良好(使用调试器并单独运行)。我唯一能想到的是,由于某种随机原因,是否有来自另一个子的剩菜(因为你说它是称为)。可能有干扰的自动过滤器(在 .Activate DOX_ws 工作表之后设置 .AutoFilterMode = False),或过滤器的工作表保护。
-
尝试将
cells限定在ConvertToLetter中得到split? -
.AutoFilterMode = False不走运,在运行 Master 子程序时仍然未排序。ConvertToLetter函数工作正常 - 它返回预期的内容(在本例中为“K”)。 -
是否有任何“Application.ScreenUpdating = False”裁决?
-
我在调用 DOX 子的 MASTER 子中确实有
Application.ScreenUpdating = False。不过这应该没关系吧?