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.Offset
和 Range.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 另一个线程,因为我有一个更具体的问题,看看我是否能找到一种方法来解决它。
我有一个 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.Offset
和 Range.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 另一个线程,因为我有一个更具体的问题,看看我是否能找到一种方法来解决它。