Excel VB Функция поиска не находит номер - PullRequest
0 голосов
/ 23 февраля 2011

Я использую функцию поиска для сравнения данных, чтобы увидеть, существует ли идентификатор на рабочем листе, но если он является номером, он не находит его с помощью VB Script.Если я нахожу это вручную, это находит это хорошо .., это ошеломляет.

Следующий код находится в цикле, который просматривает каждый идентификатор SKU на одном листе, чтобы увидеть, существует ли он на другом листе.(Если есть лучший способ сделать это, дайте мне знать.) Если sku не найден, он добавляет его на лист, я всегда придумываю дубликаты данных, потому что он не находит их через скрипт vb, даже если он уже существует... Дайте мне знать, если это не имеет смысла, я постараюсь повторить.sku всегда уникален

Sheets(productsheet).Select
        On Error Resume Next
        Cells.Find(What:=sku, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate

        If Err.Number <> 0 Then
            newSKU = newSKU + 1
            Range("A" & CurrentRow).Select
            ActiveCell.Value = trimmedSku
            ActiveCell.Font.Color = red
            With Selection
                .HorizontalAlignment = xlLeft
                .VerticalAlignment = xlTop
                .WrapText = True
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With

            Range("B" & CurrentRow).Select
            ActiveCell.Value = skudescription
            With Selection
                .HorizontalAlignment = xlLeft
                .VerticalAlignment = xlTop
                .WrapText = True
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With

            Range("D" & CurrentRow).Select
            ActiveCell.Value = sku
            With Selection
                .HorizontalAlignment = xlLeft
                .VerticalAlignment = xlTop
                .WrapText = True
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With

            Range("I" & CurrentRow).Select
            ActiveCell.Value = 1

            Range("K" & CurrentRow).Select
            ActiveCell.Value = cost

            Range("L" & CurrentRow).Select
            ActiveCell.Value = price

            Range("M" & CurrentRow).Select
            ActiveCell.Value = price

            Range("O" & CurrentRow).Select
            ActiveCell.Value = "Y"

            Range("P" & CurrentRow).Select
            ActiveCell.Value = "N"

            Range("Q" & CurrentRow).Select
            ActiveCell.Value = "Y"

            Range("AI" & CurrentRow).Select
            ActiveCell.Value = 1

            CurrentRow = CurrentRow + 1
        Else
            'Skip because it was found
        End If  

1 Ответ

0 голосов
/ 23 февраля 2011

Нет необходимости выбирать или активировать что-либо, чтобы делать то, что вы хотите. Возможно, вы не находите значение из-за некоторых аргументов поиска, но я бы сначала переписал код, чтобы избежать смены листов. Что-то вроде

Dim sh As Worksheet
Dim rFound As Range

Set sh = ThisWorkbook.Sheets("productsheet")

Set rFound = sh.Cells.Find(sku, , xlValues, xlPart)

If rFound Is Nothing Then
    Set rNext = sh.Cells(sh.Rows.Count, 1).End(xlUp).Offset(1, 0)
    rNext.Value = trimmedsku
    rNext.Offset(0, 1).Value = skudescription
    rNext.Offset(0, 3).Value = sku
    rNext.Offset(0, 8).Value = 1
    rNext.Offset(0, 10).Value = cost
    rNext.Offset(0, 11).Value = price
    rNext.Offset(0, 12).Value = price
    rNext.Offset(0, 14).Value = "Y"
    rNext.Offset(0, 15).Value = "N"
    rNext.Offset(0, 16).Value = "Y"
    rNext.Offset(0, 34).Value = 1
End If

Если rFound ничего не обнаруживает (sku не найден) и этого не должно быть, то убедитесь, что аргументы Find верны. Хотите посмотреть на xlFormulas или xlValues? Целое или Часть?

Я не вижу в ваших аргументах Find ничего такого, что могло бы сделать его более ограничительным, поэтому я не могу дать вам какой-либо конкретный совет относительно того, какие аргументы нужно изменить. Может быть, вы могли бы сделать новую процедуру тестирования, похожую на ту, которую я опубликовал, и посмотрите, не поможет ли замена листов.

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