Как использовать Vlookup в VBa? - PullRequest
0 голосов
/ 07 февраля 2019

Это код, который я написал для использования Vlookup в Vba, но я продолжаю получать

Ошибка времени выполнения 1004 Не удается получить свойство Vlookup класса функций Worksheet

If WorksheetFunction.IsNA(Application.WorksheetFunction.VLookup(ListBox1.Selected(0), Range("B4:C7"), 2, False)) = True Then
'Create row
 Range("EndlineFM").Select
   Selection.Insert Shift:=xlDown
 'Initialise Detail and montant of new row
   Range("TotalF").Offset(-1, 0) = FraisM.ListBox1.Selected(0)
Range("TotalF").Offset(-1, 1) = CSng(FraisM.Chiffremontant)

Как я могу это исправить?Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Application.WorksheetFunction.VLookup всегда вызовет ошибку времени выполнения, если не найдено совпадений - вы не можете справиться с этим, используя IsNA()

Вы можете сделать это без WorksheetFunction:

Dim m    

m = Application.VLookup(ListBox1.Selected(0), Range("B4:C7"), 2, False))

If IsError(m) Then
    'Create row
     Range("EndlineFM").Insert Shift:=xlDown
     'Initialise Detail and montant of new row
     Range("TotalF").Offset(-1, 0) = FraisM.ListBox1.Selected(0)
     Range("TotalF").Offset(-1, 1) = CSng(FraisM.Chiffremontant)
     'etc
0 голосов
/ 07 февраля 2019

Это работает следующим образом

Dim Txt As Variant
On Error Resume Next 
Txt = Application.WorksheetFunction.VLookup(FraisM.ListBox1.List(FraisM.ListBox1.ListIndex), Range("B4:C7"), 2, False)
             If Err.Number <> 0 Then
             MsgBox " Not found" ''optional, no need to do anything
             Err.Clear
             Exit Sub   ' Or may use Goto label
             End If
     On Error GoTo 0
    'Create row
     Range("EndlineFM").Select
     Selection.Insert Shift:=xlDown
    'Initialise Detail and montant of new row
     Range("TotalF").Offset(-1, 0) = Txt

Я взял FraisM в качестве имени пользователя и предполагаемый код, запущенный из модуля.Если вы используете Msform.ListBox на листе, вы можете попробовать

Dim MyLB  As Object
Set MyLB = Sheet1.Shapes("List Box 1")
Txt = Application.WorksheetFunction.VLookup(MyLB.ControlFormat.List(MyLB.ControlFormat.ListIndex), Range("B4:C7"), 2, False)
...