VBA не может найти строку - PullRequest
0 голосов
/ 15 ноября 2018

Я прошу VBA найти строку, затем конечную строку и скопировать все промежуточные строки, чтобы вставить в другой лист.Однако, когда я запускаю код, он не может найти строку.Я проверил код в отдельном файле, используя те же две строки в качестве начальной и конечной точки, и он работает просто отлично.

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

Dim findrow As Long, findrow2 As Long
On Error GoTo errhandler

findrow = Range("A:A").Find("0667 John Smith", Range("A1")).Row
findrow2 = Range("A:A").Find("TTl Hrs For Employee", Range("A" & findrow)).Row

Range("A" & findrow & ":A" & findrow2).Select
Selection.Copy
Sheets("Sheet2").Select
Range("C12").Select
ActiveSheet.Paste

errhandler:
MsgBox "No Cells containing specified text found"

Picture is example of what I'm trying to copy
Если я наберу точно такую ​​же вещь в новом документе, код не обнаружит проблем.Но в оригинале я получаю ошибку с кодом 91 в первой строке "findrow".

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Обновление: Выяснил, что с ним не так. По какой-то причине функция Find не может найти ни одну строку в исходном листе. Если я копирую весь лист в новый лист, а затем выполняю поиск кода по строкам, он находит их и копирует так, как должен. Я не знаю, что заставляет его делать это, и это не эффективно, но эй, это работает. Спасибо вам, ребята, за помощь в устранении неполадок, отдельное спасибо @ FunThomas

0 голосов
/ 15 ноября 2018

использовать полностью определенные (вплоть до объекта рабочего листа) ссылки на диапазоны и всегда указывать параметры Find() method LookAt и LookIn, чтобы неявно предполагать использование последнего метода (даже из пользовательского интерфейса Excel):

Dim firstCell As Range, lastCell As Range

With Worksheets("MySheetName") ' reference sheet where to serach for text (change "MySheetName" to your actual sheet name)
    Set firstCell = .Range("A:A").Find("0667 John Smith", Range("A1")) ' try and find first cell
    If Not firstCell Is Nothing Then ' if first cell found
        Set lastCell = .Range("A:A").Find(what:="TTl Hrs For Employee", lookat:=xlWhole, LookIn:=xlValues, after:=firstCell) ' try find last cell
        If Not lastCell Is Nothing Then ' if last cell found
            .Range(firstCell, lastCell).Copy Sheets("Sheet2").Range("C12")
        Else
            MsgBox "No Cells containing specified 'TTl Hrs For Employee'"
        End If
    Else
        MsgBox "No Cells containing specified '0667 John Smith'"
    End If
End With
0 голосов
/ 15 ноября 2018

Предполагая, что значения присутствуют, это прекрасно сработало:

findrow = Range("A:A").Find("0667 John Smith", Range("A1")).Row
findrow2 = Range("A:A").Find("TTl Hrs For Employee", Range("A" & findrow)).Row
Range("A" & findrow & ":A" & findrow2).Copy Worksheets("Sheet2").Range("C12")

, пока лист для поиска был активен. Вы можете указать это в коде:

findrow = Worksheets("Sheet1").Range("A:A").Find("0667 John Smith", Worksheets("Sheet1").Range("A1")).Row
findrow2 = Worksheets("Sheet1").Range("A:A").Find("TTl Hrs For Employee", Worksheets("Sheet1").Range("A" & findrow)).Row
Worksheets("Sheet1").Range("A" & findrow & ":A" & findrow2).Copy Worksheets("Sheet2").Range("C12")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...