我构建了一堆VBA代码(经过全面测试,似乎正在运行),其中包含
等行worker = WorksheetFunction.Match(Sheets("workerlist").Range("A1"), Sheets("master").Range("A1:A20"), 0)
我正在尝试通过索引编号引用工作表来改进我的代码,因此我将Sheets("workerlist")
替换为Sheets(1)
,并且该行分解并返回运行时错误,说它无法获取WorksheetFunction类的匹配属性。
这两个人不能一起工作吗?有没有其他方法可以改善我的引用?当我尝试查找问题时,我最后会继续使用WorksheetFunction.Index
。
答案 0 :(得分:1)
您正在创建潜在问题,而不是删除它们。
如果有人从第一个位置移动了工作列表工作表,则代码会被破坏。这类似于当前代码中有人重命名工作列表工作表时会发生的情况。
如果您想减少潜在问题,请使用工作表.CodeName property。虽然有人可能会重命名代号,但他们甚至不太可能找到它的位置。当然,比双击工作表的.Name选项卡并将工作表重新键入或拖动到队列中的新位置更复杂。更改工作表的.CodeName是一个非常慎重的行为。
<强> Addendum: 强>
我更喜欢使用Excel Application object的MATCH 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