Lookup - несоответствие типов - PullRequest
0 голосов
/ 05 марта 2019

Я не могу найти правильный тип для моей lookup функции в vba.

Моя формула Excel выглядит следующим образом и работает нормально.

=IF(INDIRECT("'Enclosure4-Workflow_Structure'!C"&MATCH('Enclosure2-Accesses'!A8; 
    'Enclosure4-Workflow_Structure'!A:A; 0))="Create"; 
    IF(LOOKUP(2; 1/('Enclosure5-Workflow_Steps'!A:A=INDIRECT("'Enclosure4-Workflow_Structure'!D"
    &MATCH('Enclosure2-Accesses'!A8; 'Enclosure4-Workflow_Structure'!A:A; 0))); 
    'Enclosure5-Workflow_Steps'!D:D) = "Task"; 'Enclosure2-Accesses'!B8; FALSE); FALSE)

Первое предложение if работает нормальнодля меня, но второе условие if содержит функцию lookup.Эта функция поиска должна выдавать "Task", поэтому я подумал, что должен установить DIM as String, но я постоянно получаю сообщение об ошибке : "Несоответствие типов".

Строка, которая выбрасываетошибка должна получить последнее вхождение значения.Это значение должно соответствовать «Задаче» в столбце D.

lOccurence = WorksheetFunction.Lookup(2, 1 / (Enc5.Range("A:A") = Enc4.Cells(MatchCrt, "D").Value), Enc5.Range("D:D"))

Мне любопытно, почему приведенная выше строка вызывает ошибку.В Excel строка работает без проблем. Неверная строка или неверный тип DIM (String)?

Мой код VBA:

Public Sub CopyUserAR2Data()

Dim Enc2 As Worksheet
Dim Enc4 As Worksheet
Dim Enc5 As Worksheet
Dim Enc9 As Worksheet
Dim MatchCrt As Double
Dim lOccurence As String


Set Enc2 = Sheets("Enclosure2-Accesses")
Set Enc4 = Sheets("Enclosure4-Workflow_Structure")
Set Enc5 = Sheets("Enclosure5-Workflow_Steps")
Set Enc9 = Sheets("Enclosure9-Dependency")

MatchCrt = WorksheetFunction.Match(Enc2.Cells(9, "A"), Enc4.Range("A:A"), 0)

lOccurence = WorksheetFunction.Lookup(2, 1 / (Enc5.Range("A:A") = Enc4.Cells(MatchCrt, "D").Value), Enc5.Range("D:D"))


If Enc4.Cells(MatchCrt, "C") = "Create" Then

    Enc9.Cells(2, 1).Value = lOccurence

End If

End Sub

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Я пошел с предложением Рори в разделе комментариев и прохожу цикл по массиву.

If sheet1.Cells(FirstCondition, "C") = "Create" Then    
For d = 1 To numberOfRows
    If (sheet1.Cells(FirstCondition, "D").Value = sheet2.Cells(d, "A").Value And sheet2.Cells(d, "D").Value = "Task") Then
         {"Cell values are entered"}
    End If
Next d
End If

Теперь это работает так, как задумано.

@ Рори, большое спасибо заВаше терпение и помощь!

0 голосов
/ 05 марта 2019

Ваш string вызовет ошибку из-за того, что вы извлекаете значение long из Lookup

. Лучше всего позвонить

Dim lOccurence As Variant

.получить ошибку, что-то еще происходит - может возвращать нулевое значение

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