Найти и заменить из списка - PullRequest
1 голос
/ 21 июня 2019

Попытка найти и заменить несколько слов в двух конкретных столбцах.

Этот код частично из нескольких, которые я видел в StackOverflow, но не позволил мне комментировать, чтобы авторы могли помочь мне.

Дает мне ошибку 457 в строке .Add RefElem.Value, RefElem.Offset(0, 1).Value, и я не знаю почему.

Sub Cambios()

    Dim Wbk As Workbook: Set Wbk = ThisWorkbook
    Dim Wsht As Worksheet: Set Wsht = Wbk.Sheets("Sheet1") 'Modify as needed.
    Dim Dict As Object
    Dim RefList As Range, RefElem As Range
    Dim TargetRng As Range

    Set Dict = CreateObject("Scripting.Dictionary")
    Set RefList = Wsht.Range("L2:L93") 'Modify as needed.
    Set TargetRng = Union(Wsht.Range("C1:C50"), Wsht.Range("F2:F345")) 'Modify as needed.

    With Dict
        For Each RefElem In RefList
            If Not .Exists(RefElem) And Not RefElem Is Nothing Then
                'ERROR HERE
                .Add RefElem.Value, RefElem.Offset(0, 1).Value
            End If
        Next RefElem
    End With

    For Each Key In Dict
        With TargetRng
            .Replace What:=Key, Replacement:=Dict(Key)
        End With
    Next Key

    Set Dict = Nothing

End Sub

Он предназначен для замены списка из 92 слов другими словами, пробелами, запятыми или ничем.

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Ошибка возникает, потому что Add RefElem.Value добавляет пустую строку в словарь, и это не совсем нормально. Проблема в условной проверке:

If Not .Exists(RefElem) And Not RefElem Is Nothing Then

Эта часть никогда не может быть ИСТИНА - RefElem Is Nothing, потому что RefElem - это ячейка диапазона, поэтому она всегда является "чем-то".

Поскольку код, скорее всего, пытается проверить, есть ли значение в ячейке, это хороший обходной путь:

If (Not .exists(RefElem.Value2)) And Trim(RefElem) <> "" Then

Дополнительно - рассмотрите запись Option Explicit в верхней части кода , таким образом, он автоматически проверит объявление всех переменных - например, в ответе key не объявлено.

0 голосов
/ 21 июня 2019
Sub FindReplace()

Dim findthis As Variant
Dim replacewith As Variant
Dim rng As range
Dim x As Long

findthis = Array("Value", "Value2", "Value3")
replacewith = Array("Difval", "Difval2", "Difval3")

Set rng = Sheets("Sheet1").range("A:A,C:C")

For x = LBound(findthis) To UBound(findthis)
rng.Cells.Replace what:=findthis(x), Replacement:=replacewith(x), _
    LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
    SearchFormat:=False, ReplaceFormat:=False
Next x

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