1

我知道这里有很多这样的问题,但我看不出哪里出了问题。

我有以下代码检查值是否在另一个工作簿的列中。

Dim masterWbk As Workbook
Dim oWbk As Workbook
Dim RowCount As Integer
Dim LookupRange As Range
Dim Exists As Variant
Dim a As Integer
Dim i As Integer
Dim jobnumber As String

    RowCount = WorksheetFunction.CountA(Sheets("Sheet1").Range("A1").EntireColumn)

    masterWbk.Activate

Set LookupRange = masterWbk.Sheets("Sheet1").Range("C1:C100")

    a = 0

    For i = 0 To RowCount - 1

        jobnumber = oWbk.Sheets("Sheet1").Range("A2").Offset(i, 0).Value

      '  On Error GoTo ExistsError:

        Exists = Application.WorksheetFunction.VLookup(jobnumber, LookupRange, 1, False)

现在该值肯定在查找范围内,并且格式相同,但 Vlookup 不起作用。它作为一个excel公式工作得很好。

我错过了什么?

4

3 回答 3

3

使用 find 它看起来像这样 -

Dim masterWbk As Workbook
Dim oWbk As Workbook
Dim RowCount As Integer
Dim LookupRange As Range
Dim Exists As Variant
Dim a As Integer
Dim i As Integer
Dim jobnumber As String

    RowCount = WorksheetFunction.CountA(Sheets("Sheet1").Range("A1").EntireColumn)

    masterWbk.Activate

Set LookupRange = masterWbk.Sheets("Sheet1").Range("C1:C100")

  a = 0

  For i = 0 To RowCount - 1

  jobnumber = oWbk.Sheets("Sheet1").Range("A2").Offset(i, 0).Value
  If Trim(jobnumer) <> "" Then
    With lookuprange
        Set Rng = .Find(What:=jobnumber, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
        If Not Rng Is Nothing Then
            Exists = 1
        Else
            Exist = 0
        End If
    End With
  End If
于 2013-03-22T16:10:06.003 回答
0

我认为WorksheetFunction.Vlookup. 在我对 Excel 2007 的测试中,如果找到搜索字符串,则返回相应单元格的值。如果您搜索完全匹配,您会得到可怕的错误 1004。

如果你想使用 Vlookup,

...

Dim FoundText as String

...

FoundText=""

On Error Resume Next

FoundText=Application.WorksheetFunction.VLookup(jobnumber, LookupRange, 1, False)

On Error Goto 0

Exists= (FoundText <> "")

...
于 2013-03-22T16:18:43.073 回答
0

这似乎在 Excel 2010 中工作正常......

我建议您使用 VLOOKUP 可能会出错,因为您已将尺寸标注jobNumber为字符串,并且尽管工作表/单元格“格式化”,但工作表中的作业编号可能存储为数值。

所以,问题在于“123”<> 123。测试 jobNumber 是否为数字,然后确保将正确类型的数据传递给函数。

If IsNumeric(jobNumber) Then
    Exists = Application.WorksheetFunction.VLookup(CLng(jobNumber), lookupRange, 1, False)
Else:
    Exists = Application.WorksheetFunction.VLookup(jobNumber, lookupRange, 1, False)
End If
于 2013-03-22T16:42:18.087 回答