我一直在尝试使用代码来编写我的所有代码,以防止更改名称时出现错误并停止激活/选择工作表。这一直顺利,直到我得到排序代码,我认为以下将选择Sheet2
ActiveWorkbook.Sheets(2).Sort.SortFields.Clear
ActiveWorkbook.Sheets(2).Sort.SortFields.Add Key:=Range( _
"A2:A" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Sheets(2).Sort.SortFields.Add Key:=Range( _
"J2:J" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Sheets(2).Sort
.SetRange Range("A1:J" & LastRow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
事实上它确实适用于Sheet2,但我在添加新工作表后发现它根据文档中的位置(底部的标签)计算工作表。
尝试用ActiveWorkbook.Sheet2.Sort.SortFields.Clear
之类的内容替换任何这些行会给我错误" 438 - 对象不支持此属性或方法"。
我能够让它工作的唯一方法是用ActiveWorkbook.Sheets(Sheet2.Name).Sort.SortFields.Clear
替换它。在我看来,也许我在这里遗漏了一些东西,但我在寻找与代号和分类有关的任何事情时遇到了麻烦。
答案 0 :(得分:2)
只需使用代码名称将工作表分配给变量:
from tree import *
def traverse(bst,empty_fn,leaf_fn,inner_node_fn):
if is_empty_tree(bst):
return empty_fn()
else:
left,root,right= bst[0],bst[1],bst[2]
if is_leaf(left):
left= leaf_fn(left)
if is_leaf(right):
right=leaf_fn(right)
return inner_node_fn(root,left, right)
def contains_key(key, tree):
def empty_fn():
return not is_empty_tree(tree)
def leaf_fn(side):
return side==key
def inner_node_fn(k,left,right):
if k==key:
return True
if isinstance(left,list) and isinstance(right,list):
return contains_key(key,left) or contains_key(key,right)
elif isinstance(right,list):
return contains_key(key,right)
elif isinstance (left,list):
return contains_key(key,left)
else:
return right or left
return traverse(tree,empty_fn,leaf_fn,inner_node_fn)
print(contains_key("m", [["m",6,4], 7, [[2, 3, 4], 0, []]]))
然后你会用:
打电话给每一行Dim ws As Worksheet
Set ws = Sheet2
答案 1 :(得分:0)
使用工作表名称而不是索引,如下所示:
ActiveWorkbook.Sheets("Sheet2").Sort.SortFields.Clear
只要工作表名称不变,就可以使用。