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

时间:2016-06-07 17:06:17

标签: excel excel-vba excel-formula vba

我构建了一堆VBA代码(经过全面测试,似乎正在运行),其中包含

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

我正在尝试通过索引编号引用工作表来改进我的代码,因此我将Sheets("workerlist")替换为Sheets(1),并且该行分解并返回运行时错误,说它无法获取WorksheetFunction类的匹配属性。

这两个人不能一起工作吗?有没有其他方法可以改善我的引用?当我尝试查找问题时,我最后会继续使用WorksheetFunction.Index

1 个答案:

答案 0 :(得分:1)

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

如果有人从第一个位置移动了工作列表工作表,则代码会被破坏。这类似于当前代码中有人重命名工作列表工作表时会发生的情况。

如果您想减少潜在问题,请使用工作表.CodeName property。虽然有人可能会重命名代号,但他们甚至不太可能找到它的位置。当然,比双击工作表的.Name选项卡并将工作表重新键入或拖动到队列中的新位置更复杂。更改工作表的.CodeName是一个非常慎重的行为。

<强> Addendum:

我更喜欢使用Excel Application objectMATCH function版本。这与WorksheetFunction object调用的不同。使用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