为什么Excel VBA Range.Find返回不正确的值?

时间:2018-05-29 19:48:42

标签: excel-vba vba excel

我在VBA中有一个Sub,它正在查看工作表中的一个关键列,并根据列中的值从文本文件中提取值。 A列有一系列3位数字,从110到717,共有80个值。我将Range设置为(“A:A”),然后使用Range.find搜索文本文件中的键值。范围中的第一个单元格是A1,值为110.Range.Find返回此值的A6。我不确定在一行或两行代码可能导致这种情况发生的情况。知道我做错了吗?

这是我的潜艇。这是我的全部代码。

Sub DoTheWork()
Dim wb As Workbook
Dim ws As Worksheet
Dim FSO As Object
Dim TF As Object
Dim TextFile
Dim TextLine
Dim TextLines As Variant
Dim x As Integer
Dim Code As String
Dim PurposeCode As Range
Dim SearchArea As Range
Dim CurrentRow As Integer
Dim KeyRow As Integer
Dim i As Integer


Set wb = Application.ActiveWorkbook
Set ws = ActiveWorkbook.Sheets(2)
TextFile = Application.GetOpenFilename("Text Files (*.txt), *.txt")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TF = FSO.OpenTextFile(TextFile, 1)
TextLine = TF.ReadAll
TF.Close
TextLines = Split(TextLine, vbCrLf)
Set PurposeCode = ws.Range("A:A")
For x = 0 To UBound(TextLines, 1)
    Code = Right(Left(TextLines(x), 4), 3)
    If IsNumeric(Code) Then
        Code = CInt(Code)
        Set SearchArea = PurposeCode.Find(Code, , xlValues, xlPart, xlByRows, xlNext)
        If Not SearchArea Is Nothing Then
            KeyRow = SearchArea.Row
            Cells(KeyRow, 2).Value = Code
        End If
    End If
Next
End Sub

示例输出: Worksheet after Macro finishes

由于

编辑以显示TextFile的内容:

 110     17     0.25
 111      1     0.01
 113      5     0.06
 115      3     0.03
 120    582     8.77
 121                
 140   3,053   45.02

所以我打开文本文件,将所有行读入数组,然后取出文件前4个字符中的三位数字,并将其与sheet2上电子表格中相同的三位数代码进行匹配。我只使用sheet2,所以当我设置ws时我指定了sheet2。

我确实改为ws.Cells(KeyRow, 2).Value = Code,但没有任何区别。

1 个答案:

答案 0 :(得分:0)

经过更多的研究,特别是在我的评论中特别创建了一个返回工作表名称的函数,我发现这个工作簿上有很多隐藏的工作表,其中sheet2是2004年的一个工作表,但是有相同的数字但有5个首先导致我的搜索结果偏移5的标题行。