Excel VBA 排序崩溃 Excel Mac

Excel VBA sort crashes Excel for Mac

我有一个 excel 电子表格,后面有很多 VBA。这一切都在 PC 上运行良好。我现在正在安装 Mac 的 Office 365 的 Mac 上对其进行测试。 mac 是 运行 Big Sur,v11.3。

所有更复杂的代码都可以正常工作,但一个简单的排序函数会导致 excel 崩溃。它不会抛出 VBA 错误 - 它会直接关闭 excel。即使我使用 On Error GoTo Something 这样我也可以,例如生成一个错误消息框,它甚至不会这样做 - 一旦遇到这行代码,excel 就消失了。

导致崩溃的代码行是:

rngAllData.Sort key1:=Cells(3, colNum), order1:=xlDescending

rngAllData 是一个有效范围,如果我将代码行更改为 rngAllData.Select 它会选择我期望排序的范围,没问题。就是不喜欢排序功能

我创建了一个新的 excel 文档,在 A 列中添加了一些随机数,并创建了一个调用 Range("A1:A8").Sort key1:=Range("A1") 的按钮,结果是一样的 - 即时崩溃。所以问题显然出在 Range.Sort

如果我没有收到任何错误消息,我该如何进行故障排除? 我怎样才能修改代码,使其在 PC 和 mac 上都能工作?

下面复制了完整的 sub,变量在其他地方声明,同样,这在 PC 上工作正常,所以它不应该是一个未声明的变量问题。

Sub SortData()
'This sub is called to sort table data
On Error GoTo errHandler

'Determine column number of clicked button
colNum = ActiveSheet.Buttons(Application.Caller).TopLeftCell.Column

'If the selected sort column is different to the last sorted column, reset the sort order back to default
If colNum <> lastSortCol Then sortOrder = False
lastSortCol = colNum

'Determine range of data
Set rngAllData = Range("A1").CurrentRegion.Offset(2)
Set rngAllData = rngAllData.Resize(rngAllData.Rows.Count - 2, rngAllData.Columns.Count - 1)

'Sort data
If sortOrder Then rngAllData.Sort key1:=Cells(3, colNum), order1:=xlDescending
If Not sortOrder Then rngAllData.Sort key1:=Cells(3, colNum), order1:=xlAscending
sortOrder = Not (sortOrder)
Exit Sub

errHandler:
MsgBox "Error in SortData.", vbCritical

End Sub

似乎 excel for mac 不喜欢对范围 objects 进行排序。

我的数据 table 大小不一,因此要找到要排序的数据范围,我使用 Range("A1").CurrentRegion。然后我需要对三个 header 行和最后一列进行折扣(其中有一些控件应该 而不是 进行排序),所以我使用 Range.OffsetRange.Resize。与其在我的 Range.Sort 中设置一个巨大的序言并使该行延伸到页面的一侧,我想我只是创建一个范围 object 来引用:

'Determine range of data
Set rngAllData = Sheets("Job List").Range("A1").CurrentRegion.Offset(2)
Set rngAllData = rngAllData.Resize(rngAllData.Rows.Count - 2, rngAllData.Columns.Count - 1)

'Sort data
If sortOrder Then rngAllData.Sort key1:=Cells(3, colNum), order1:=xlDescending
If Not sortOrder Then rngAllData.Sort key1:=Cells(3, colNum), order1:=xlAscending
sortOrder = Not (sortOrder)

当我在任何范围 object.

上尝试 Range.Sort 操作时,就会出现不良行为

如果我手写:

'Determine range of data
Set rngAllData = Sheets("Job List").Range("A1").CurrentRegion.Offset(2)

'Sort data
If sortOrder Then Sheets("Job List").Range("A1").CurrentRegion.Offset(2).Resize(rngAllData.Rows.Count - 2, rngAllData.Columns.Count - 1)
.Sort key1:=Cells(3, colNum), order1:=xlDescending
If Not sortOrder Then Sheets("Job List").Range("A1").CurrentRegion.Offset(2).Resize(rngAllData.Rows.Count - 2, rngAllData.Columns.Count - 1)
.Sort key1:=Cells(3, colNum), order1:=xlAscending
sortOrder = Not (sortOrder)

...然后它看起来很糟糕,但它确实有效。

我猜这是 excel 中 Mac 的错误,而不是我天生做错的事情,但我会 post 另一个线程,因为我有一个更具体的问题,看看我是否能找到一种方法来解决它。

Follow up post is here