我有一本带有两个工作表的工作簿。“2020-2021”工作表在其 D 列中有一些唯一编号。匹配结果应出现在“欠款”工作表中。“欠款”中的 C2 单元格有一个我想在 2020-2021 年在 D 列中匹配的数字。输入以下代码。
Range("C3").Value = WorksheetFunction.Match(Range("c2").value,Range('2020-2021'!d11:d206),0)
Run Code Online (Sandbox Code Playgroud)
给出编译错误
合格;那有什么意思?
与这种情况有关,例如Range("C3")不合格。我们不确定它指的是哪里(属于)。它的缩写ActiveSheet.Range("C3")意味着如果我们选择Sheet1它会引用C3on Sheet1,如果我们选择Sheet2它会引用C3onSheet2等等。
但是,如果我们使用Worksheets("Sheet1").Range("C3")我们已经限定了范围和我们选择的任何工作表,它将始终引用C3工作表Sheet1(不是 100% 正确,因为......)。
与范围案例类似,我们说工作表 inWorksheets("Sheet1").Range("C3")不合格。该表达式实际上是ActiveWorkbook.Worksheets("Sheet1").Range("C3").
为了限定它,我们可以做到Workbooks("Test.xlsm").Worksheets("Sheet1").Range("C3")。现在我们说范围是完全限定的,工作表也是如此。这通常看起来不切实际,所以ThisWorkbook“来拯救”。
如果您需要参考包含此代码的工作簿,只需使用ThisWorkbook. 你不在乎它是否被调用Test.xlsm或Last Years Official Inventory Report whatever.xlsm......只需使用ThisWorkbook.
与我们的案例相关,然后我们可以使用以下方法完全限定我们的范围:
ThisWorkbook.Worksheets("Arrears").Range("C3")
Run Code Online (Sandbox Code Playgroud)
Application.Match 与 WorksheetFunction.Match
Sub qualifyAP()
' Define workbook.
Dim wb As Workbook
Set wb = ThisWorkbook ' The workbook containing this code.
' Define worksheets.
Dim src As Worksheet
Set src = wb.Worksheets("2020-2021")
Dim tgt As Worksheet
Set tgt = wb.Worksheets("Arrears")
' Use the Application version of Match.
Dim Result As Variant ' can hold any datatype incl. error value.
Result = Application.Match(tgt.Range("C2").Value, src.Range("D11:D206"), 0)
If Not IsError(Result) Then
tgt.Range("C3").Value = Result
'MsgBox "Data found and transferred."
Else
MsgBox "Data not found. Nothing done."
End If
End Sub
Sub qualifyWF()
' Define workbook.
Dim wb As Workbook
Set wb = ThisWorkbook ' The workbook containing this code.
' Define worksheets.
Dim src As Worksheet
Set src = wb.Worksheets("2020-2021")
Dim tgt As Worksheet
Set tgt = wb.Worksheets("Arrears")
' Use the WorksheetFunction version of Match.
On Error Resume Next
tgt.Range("C3").Value = WorksheetFunction.Match(tgt.Range("C2").Value, _
src.Range("D11:D206"), _
0)
If Err.Number = 0 Then
'MsgBox "Data found and transferred."
Else
MsgBox "Data not found. Nothing done."
End If
On Error GoTo 0
End Sub
Sub qualifyQF()
Worksheets("Arrears").Range("C3").Value = WorksheetFunction _
.Match(Worksheets("Arrears").Range("C2").Value, _
Worksheets("2020-2021").Range("D11:D206"), _
0)
' or:
With Worksheets("Arrears")
.Range("C3").Value = WorksheetFunction _
.Match(.Range("C2").Value, _
Worksheets("2020-2021").Range("D11:D206"), _
0)
End With
' or even:
With Worksheets("Arrears").Range("C3")
.Value = WorksheetFunction _
.Match(.Offset(-1).Value, _
Worksheets("2020-2021").Range("D11:D206"), _
0)
End With
End Sub
Run Code Online (Sandbox Code Playgroud)