VBA匹配函数,用于查找非活动工作表上的活动单元格值并更改活动工作表上的值

VBA匹配函数,用于查找非活动工作表上的活动单元格值并更改活动工作表上的值,vba,excel,Vba,Excel,我尝试在另一张工作表上查找光标使用application.match函数的活动单元格的值。如果找到它,我希望根据ActiveCell.Row和确定的列更改活动工作表中单元格的值 我试着使用这个代码 Sub test() Dim wert As String Dim such1 As String Dim var As Integer such1 = ActiveCell.Value On Error Resume Next var = Appli

我尝试在另一张工作表上查找光标使用application.match函数的活动单元格的值。如果找到它,我希望根据ActiveCell.Row和确定的列更改活动工作表中单元格的值

我试着使用这个代码

Sub test()
    Dim wert As String
    Dim such1 As String
    Dim var As Integer

    such1 = ActiveCell.Value
    On Error Resume Next
    var = Application.Match(such1, Worksheets(Test1).Columns(1), 0)

    If Err = 0 Then
        wert = Sheets("Test2").Cell(var, "N").Value
        Sheets("Test2").Cell(ActiveCell.Row, "O").Value = wert
    Else
        MsgBox "Value not existent"
    End If

End Sub
不知怎的,我总是收到错误信息。我不明白为什么。你知道吗?

使用如下语法:

Option Explicit

Public Sub test()
    Dim foundRow As Variant
    Dim activeRow As Long
    Dim foundN As String

    activeRow = ActiveCell.Row

    foundRow = Application.Match(ActiveCell, Worksheets("Test1").Columns(1), 0)

    If Not IsError(foundRow) Then
        foundN = Worksheets("Test2").Cells(foundRow, "N").Value
        Worksheets("Test2").Cells(activeRow, "O").Value = foundN
    Else
        MsgBox "Value not existent"
    End If
End Sub

代码中的错误:

  • 工作表(test1)
    应该是
    工作表(“test1”)
  • 工作表(“Test2”)。单元格
    应为
    工作表(“Test2”)。单元格
    (单元格末尾的“s”)
  • 应用程序.Match()和工作表function.Match()之间有细微的区别

    • WorksheetFunction.Match()
      不如
      Application.Match()可靠。
    • WorksheetFunction.Match()
      抛出运行时错误

      • 您需要使用“错误恢复下一步”语句
        ,以绕过VBA错误
    • Application.Match()
      返回一个错误对象

      • 错误恢复下一步时的语句
        不起作用
      • 要检查返回值,必须使用
        If-IsError(Application.Match(…)
      • 请注意foundRow的定义方式:
        Dim foundRow As
        Variant
      • 返回值可以是行号(长)或错误对象(变量)

您尚未向变量
InactiveSheet
声明或分配任何值,因此宏无法找到此类工作表。另一个问题:您有名为
ActiveSheet
的工作表吗?如果要使用当前处于活动状态的工作表,只需使用
ActiveSheet.Cell
,而不是
Sheets(“ActiveSheet”).Cell
。您好,很抱歉造成混淆。对于非活动工作表和活动工作表,我只想成为通用的。所以,InactiveSheet将是例如测试1,ActiveSheet将是测试2。我在上面更改了它。我正确地阅读了microsoft关于如何为application.match函数编写工作表名称的说明。除了我已经习惯了之外,我还得不带“.谢谢你!很有效,太好了!同时也非常感谢您的有益解释!