在分类代码中使用工作表代码

时间:2016-10-21 16:51:13

标签: excel vba excel-vba

我一直在尝试使用代码来编写我的所有代码,以防止更改名称时出现错误并停止激活/选择工作表。这一直顺利,直到我得到排序代码,我认为以下将选择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替换它。在我看来,也许我在这里遗漏了一些东西,但我在寻找与代号和分类有关的任何事情时遇到了麻烦。

2 个答案:

答案 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

只要工作表名称不变,就可以使用。