【问题标题】:I am trying to use index and match in VBA我正在尝试在 VBA 中使用索引和匹配
【发布时间】:2017-05-31 16:11:51
【问题描述】:

我对 vba 很陌生,对于我在下面的代码中犯的(许多)错误,我深表歉意。当我设置 xy 变量时出现错误,而且当我尝试运行索引和匹配组合时也出现错误。任何帮助将不胜感激!

Public Sub indexandmatch()

Dim x As Range
Dim y As Range
Dim mycells As Range
Dim p As Variant

'workbooks(1) is the master workbook where I am trying to get the information from the other reports to be entered in to

Application.Workbooks(1).Activate

x = Application.Workbooks(2).Worksheets(1).Range("H:H")
y = Application.Workbooks(2).Worksheets(1).Range("I:I")

'range v is where I would like the values to be entered in the master

For Each mycells In Range("V:V")    
  p = Application.WorksheetFunction.Index(x, Application.WorksheetFunction.Match(mycells.Offset(0, -11).Value, y), 0)
  mycells = p.Value
Next

End Sub

【问题讨论】:

  • 赋值对象变量时需要使用Set
  • “我收到错误”没有任何意义 - 您需要 edit 您的问题包含您遇到的具体错误,以及准确的在哪里 i> 在它发生的代码中。

标签: vba indexing match


【解决方案1】:

你必须 Set 任何对象变量,因为 range

然后使用Application对象函数将可能的错误包装为返回值,以便您可以使用IsError()函数检查它并进行相应的处理

最终避免Select/Activate 模式并使用完全限定的范围引用

Public Sub indexandmatch()
    Dim x As Range
    Dim y As Range
    Dim mycells As Range
    Dim p As Variant

    'workbooks(1) is the master workbook where I am trying to get the information from the other reports to be entered in to

    Set x = Workbooks(2).Worksheets(1).Range("H:H")
    Set y = Workbooks(2).Worksheets(1).Range("I:I")

    'range v is where I would like the values to be entered in the master

    For Each mycells In Workbooks(1).Worksheets("myMasterWorksheetName").Range("V:V") '<--| use fully qualified (up to worksheet and workbook) range reference. (change "myMasterWorksheetName" to you actual master workbook relevant worksheet name
        p = Application.Match(mycells.Offset(0, -11).Value, y)
        If Not IsError(p) Then
            p = WorksheetFunction.Index(x, p, 0)
            If Not IsError(p) Then mycells = p
        End If
    Next
End Sub

【讨论】:

  • 抱歉,我应该更具体地说明错误。非常感谢user3598756。我仍然收到一个错误,我不太清楚为什么,当我运行代码时它返回“运行时错误 424”:需要对象并突出显示代码的“mycells = p.value”部分。有什么想法吗?
  • 对不起,这是我的错:.Value 太多了。请参阅编辑后的答案。如果它解决了您的问题,您可能希望将其标记为已接受。谢谢!
  • 没有错误消息并且宏运行,但由于某种原因在 col V:V 中没有返回值。我检查了基本错误,例如工作表名称的拼写,从 mycells 到查找匹配值的列数,但它们看起来都还可以。你知道为什么会这样吗?
  • 您必须单步执行您的代码并查看发生了什么:1) 将光标放在您 sub 的任何语句中 2) 按 F8 并启动宏并突出显示要执行的第一个语句 3 ) 使用即时窗口 (CTRL+G 将其弹出) 并查询相关变量,例如键入 ?p (或 ?mycells.Address 或 ?(mycells.Offset(0, -11).Value`) 按回车键并查看返回值4)按F8跳到下面的语句
  • p = Application.Match(mycells.Offset(0, -18).Value, y) = 空。当我踏入潜艇时,这就是我得到的。问题是空的吗?
猜你喜欢
  • 2021-06-14
  • 2014-12-10
  • 2015-12-15
  • 1970-01-01
  • 2021-05-25
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
相关资源
最近更新 更多