excel - Excel VBA 排序崩溃 Excel for Mac
问题描述
我有一个 excel 电子表格,后面有很多 VBA。这一切都在 PC 上运行良好。我现在在安装了 Office 365 for Mac 的 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 不喜欢对范围对象进行排序。
我的数据表的大小可能会有所不同,因此要找到要排序的数据范围,我使用Range("A1").CurrentRegion
. 然后我需要打折三个标题行和最后一列(其中有一些不应该排序的控件),所以我使用Range.Offset
and Range.Resize
。与其有一个巨大的序言Range.Sort
并使线条从页面的一侧延伸,我想我只是创建一个范围对象来引用:
'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)
一旦我尝试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)
...然后它看起来很可怕,但它的工作原理。
我猜这是 Mac 的 excel 中的一个错误,而不是我天生做错的事情,但现在我会发布另一个线程,因为我有一个更具体的问题,看看我是否能找到一种方法来整理它了。
推荐阅读
- system-verilog - SystemVerilog $bits() 返回类型?
- typescript - 枚举映射的打字稿转换问题
- python - 如何在python中多线程发布请求
- python - 显示每个项目的 Treeview 插入
- java - POST 请求后,OkHttp 在响应正文中得到错误的字节
- python - 如果键有多个值,则复制 json 对象并添加到主 json 对象
- c# - 在 C# 中配置 MinIO 时出错 - 授权标头格式错误;该地区是错误的;期待“eu-west-2”
- python - 将 JSON 字符串转换为列表并访问其中的第三个元素
- javascript - 如果侧下拉菜单离开屏幕,重新定位它
- sql - 无法将 csv 文件导入 Postgres,错误参数无效