gpt4 book ai didi

excel - VBA 2016兼容性问题

转载 作者:行者123 更新时间:2023-12-03 02:21:48 25 4
gpt4 key购买 nike

该代码在 Excel 2013 和 Excel 2010 中运行良好 - 但在 Excel 2016 中显示错误:

Run time error 9 - subscript out of range

你能帮忙吗?该代码只是对一列进行排序并将其隐藏。

Sub abc()
Sheets("Top_Issue").Visible = True
Sheets("Top_Issue").Select
lastrow = Cells(Rows.Count, "a").End(xlUp).Row
Range(Cells(1, "p"), Cells(lastrow, "p")).Select
ActiveWorkbook.Worksheets("Top_Issue").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Top_Issue").Sort.SortFields.Add Key:=Range("P1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Top_Issue").Sort
.SetRange Range("A2:S" & lastrow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets("Top_Issue").Visible = False
End Sub

最佳答案

您在此处隐式引用了 ActiveSheet:

lastrow = Cells(Rows.Count, "a").End(xlUp).Row
Range(Cells(1, "p"), Cells(lastrow, "p")).Select

上面的非限定 Range 成员调用相当于:

lastrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "a").End(xlUp).Row
ActiveSheet.Range(ActiveSheet.Cells(1, "p"), ActiveSheet.Cells(lastrow, "p")).Select

使用 .Select/.Activate 并隐式引用事件工作表的代码很可能在假设被打破时最终崩溃,例如当 ActiveWorkbook 不是代码假定的工作簿。

您将提取该 Top_Issue 工作表的对象引用 6 次;有时来自 ActiveWorkbook,有时使用 Sheets 集合,其他时候使用 Worksheets 集合,其中 .Select 调用之间。

With block 开始,并确保所有 RangeWorksheet 成员调用都经过正确限定:

With ActiveWorkbook.Worksheets("Top_Issue")
.Visible = True
.Select
lastrow = .Cells(.Rows.Count, "a").End(xlUp).Row
.Range(.Cells(1, "p"), .Cells(lastrow, "p")).Select
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=.Range("P1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .Sort
.SetRange .Range("A2:S" & lastrow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
.Visible = False
End With

如果 Top_Issue 工作表在编译时存在于 ThisWorkbook 中,则设置其 (Name) 属性(在 Properties toolwindow F4) 到,例如TopIssueSheet,并使用该标识符,而不是从 Worksheets 集合中提取。

请注意,ActiveWorkbook(当前事件的书籍)可能是也可能不是 ThisWorkbook(包含此代码的书籍) - 如果错误的书籍处于事件状态,并且它没有 Top_Issue 表,这就是您收到运行时错误 9 的原因。

使用工作表的代码名称,您不再需要关心哪个工作簿可能处于事件状态:

With TopIssueSheet
...
End With

当您处理的工作簿不是 ThisWorkbook 时,您应该只需要从工作簿的 Worksheets 集合中提取工作表。

关于excel - VBA 2016兼容性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51559558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com