使用工作表索引后打破WorksheetFunction?

我build立了一堆VBA代码(经过了充分的testing,似乎在工作),其中包括诸如

worker = WorksheetFunction.Match(Sheets("workerlist").Range("A1"), Sheets("master").Range("A1:A20"), 0) 

我试图通过引用索引号来改善我的代码,所以我用Sheets(1)replace了Sheets("workerlist") Sheets(1) ,并且行中断并返回一个运行时错误,表示无法获得Match属性WorksheetFunction类。

两个人不能一起工作吗? 有没有其他的方法来改善我的参考? 当我试图查找这个问题时,我只是一直使用WorksheetFunction.Index结束页面。

您正在创build潜在的问题,而不是删除它们。

如果有人从第一个位置移动工作表工作表,则代码已损坏。 这与您当前的代码中发生的情况类似,如果有人重命名工作表工作表。

如果您想要减less潜在的问题,请使用Worksheet .CodeName属性 。 虽然有人可能会重命名代号,但他们甚至不可能find该做的地方。 当然,比双击工作表的.Name选项卡更复杂,然后将工作表重新input到队列中的新位置。 更改工作表的.CodeName是一个非常慎重的行为。

附录:

我更喜欢使用Excel应用程序对象的MATCH函数版本。 这与WorksheetFunction对象所调用的不一样。 使用Application.Match(..., ..., 0)可以让你捕捉一个变体的错误。

 dim worker as variant worker = application.Match(Sheets("workerlist").Range("A1"), Sheets("master").Range("A1:A20"), 0) if IsError(worker) then 'no match found; worker is Error 2042 else 'match found; worker is a row number end if