未知的索引匹配问题

时间:2017-04-19 11:01:31

标签: excel vba excel-vba

我收到以下代码的错误

  

对象'_Worksheet'的方法'Range'失败。

有谁可以看到这里的问题是什么?

Dim to_do As Worksheet, ordered As Worksheet
Set to_do = Sheets("To do log")
Set ordered = Sheets("Working File")

to_do.Range(G4).Formula = _ 
   Application.WorksheetFunction.Index(ordered.Range("F:F"), _
   Application.Match(to_do.Range("B4"), ordered.Range("B:B"), 0))

2 个答案:

答案 0 :(得分:3)

to_do.Range(G4)不是有效的定义。它应该是to_do.Range("G4")。 @灰。正确指出如果您在代码表的顶部使用Option Explicit,VBA会在您第一次运行代码时突出显示错误。

我建议您使用Value属性来分配值,除非它是您要分配的Formula,但是您的代码会分配一​​个值,因为INDEX函数会返回Value属性为默认值的范围。如果你想要公式,你必须指定它。

答案 1 :(得分:1)

根据工作表名称,您可以快速解决问题,因此您不需要在代码中声明它们。 您打算在单元格中打印公式,因此您也可以使用FormulaR1C1。 我的解决方案是:

enter image description here

wsTodo.Range("G4").FormulaR1C1 = "=INDEX('" & wsWorkingFile.Name & "'!C6,MATCH(R4C2,'" & wsWorkingFile.Name & "'!C2))"

对于更改,转到VBA项目单击工作表并在属性(名称)中为其命名。

enter image description here

您使用此代码解决了什么:

  • 您不必担心工作表是否会更改名称
  • 如果您更改计划名称,则可以更快地编码
  • 您不需要每次都声明表单