使用工作表索引后打破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