Почему Excel VBA Range.Find возвращает неправильное значение? - PullRequest
0 голосов
/ 29 мая 2018

У меня есть один Sub в VBA, который просматривает ключевой столбец на рабочем листе и извлекает значение из текстового файла на основе значения в столбце.Столбец А содержит последовательность из трех цифр от 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 символах файла и сопоставляю его с тем же самымтрехзначный код в таблице на листе 2.Я работаю только с sheet2, поэтому я указал sheet2, когда я установил ws.

Я изменил на ws.Cells(KeyRow, 2).Value = Code, и это не имело значения.

1 Ответ

0 голосов
/ 30 мая 2018

После дополнительных исследований, в частности, создания функции для возврата имен листов, на которую ссылается мой комментарий, я обнаружил, что в этой книге есть несколько скрытых листов, причем лист2 представляет собой лист 2004 года с теми же номерами, но с 5первые строки заголовка, которые приводили к смещению результатов поиска на 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...