在我的Excel工作簿中,我有一个对话框(从“费用”工作表触发的“费用”框),该对话框在单独的工作表(“帐户”工作表)上触发排序,以在添加或修改帐户时按字母顺序保持帐户名称。除以下两点外,一切都可以正常工作:
我不想更改“帐户”工作表上的选择。但是排序功能(尤其是下面代码的Apply部分)选择了整个Accounts表,我猜想是因为Expense框是在与我要排序的东西不同的单独工作表上触发的。
“帐户”工作表具有一个Worksheet_SelectionChange事件,该事件因选择更改而被触发,并且该事件包含一个“相交”。当您在单独的工作表上测试两个范围的交集时,Excel会发出嘶嘶声。因此,这会使我的整个宏爆炸。我可以放置一个If语句来包含交集,以测试Activecell是否在正确的工作表上,但是我宁愿放弃它,也不要一开始就更改选择。
有人有没有选择表格的排序方法吗?到目前为止,这是我的代码。 (范围AccountsTable引用帐户的名称和字段,即Main!$ A $ 35:$ A $ 43。该split语句的原因是在第一列(名称列)上排序。)
ActiveWorkbook.Worksheets("accounts").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("accounts").Sort.SortFields.Add Key:=Range(Split(Range("AccountsTable"), ":")(0)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("accounts").Sort
.SetRange Range(AccountsTable)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply '<==this is where the selection is happening
End With
任何建议都值得赞赏!
我已经检查了Google是否提供了一些其他代码,但没有什么特别适合我。我还在堆栈溢出上尝试过VBA Sort in Excel leaves table contents selected,但是当我碰到这一行时,这里描述的方法给我一个错误:Set lo = ActiveWorkbook.Worksheets("Accounts").ListObjects("accounts_table")
。不知道为什么。