Как использовать коллекцию в vba для обновления другой ячейки по сравнению со значением одной ячейки - PullRequest
0 голосов
/ 13 марта 2019

Мой лист Excel:

enter image description here

Мой код VBA:

Sub popdata()

    Set compreplace = New Collection
    compreplace.Add "AA-", "test@yahoo.com"
    compreplace.Add "BB-", "test2@yahoo.com"
    compreplace.Add "CC-", "test3@yahoo.com"
    compreplace.Add "DD-", "test4@yahoo.com"
    compreplace.Add "EE-", "test5@yahoo.com"

    Call popexcel

End Sub

Function popexcel()
    Dim rc As Integer
    rc = UsedRange.Rows.Count
    Dim i As Integer  

    For i = 2 To rc
        //fill in "L" column value respective to the row
        //example "L2" should have "AA-" because "K2" value is "test@yahoo.com"
        Range("L" & i).Value = compreplace.Item(Range("K" & i).Value)
    Next i
End Function

Однако я получаю следующую ошибку в VBA:

Ошибка времени выполнения '5':

Недопустимый вызов процедуры или аргумент

Любая идея, как решить эту проблему, будет принята с благодарностью.

1 Ответ

1 голос
/ 13 марта 2019

В вашем коде есть две проблемы. Во-первых, коллекция не объявлена ​​таким образом, что оба метода могут получить к ней доступ. Другая проблема заключается в том, что вы не заботитесь о случаях, когда адрес не найден. Посмотрите ниже:

Public compreplace As Collection

Sub popdata()    
    Set compreplace = New Collection
    compreplace.Add "AA-", "test@yahoo.com"
    compreplace.Add "BB-", "test2@yahoo.com"
    compreplace.Add "CC-", "test3@yahoo.com"
    compreplace.Add "DD-", "test4@yahoo.com"
    compreplace.Add "EE-", "test5@yahoo.com"

    popexcel

End Sub

Function popexcel()
    Dim rc As Integer
    rc = ActiveSheet.UsedRange.Rows.Count
    Dim i As Integer

    For i = 2 To rc
        If ItemExists(compreplace, Range("K" & i).Value) Then
            Range("L" & i).Value = compreplace.item(Range("K" & i).Value)
        End If
    Next i
End Function


Function ItemExists(coll As Collection, item As String) As Boolean
    On Error Resume Next
    coll.item item
    ItemExists = (Err.Number = 0)
End Function

Функция ItemExists возвращает true, если есть соответствующий элемент. Публичное объявление вверху делает его доступным для вашего метода pop. Не лучшим образом, но это работает.

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