vba vlookup 11-значный номер не работает - PullRequest
0 голосов
/ 08 июня 2018

Я создал пользовательскую форму с некоторым текстовым полем, когда пользователь заполняет текстовое поле некоторым номером детали (например, 160007), все другие текстовые поля имеют формулу vlookup для поиска в базе данных какой-либо другой информации.

Проблема в том, что когда vlookup ищет номер по каталогу, который содержит 1-9 цифр, он работает нормально, но если есть номер детали с более чем 9 цифрами, если ничего не возвращается (у нас есть номер детали до 15 цифр, только цифры, неттексты) Я попытался изменить формат базы данных на текст, число, общее ... не работает

В приведенном ниже коде textbox3 является проблемой, когда textbox2 заполняется большими числами

Private Sub TextBox1_AfterUpdate()


On Error Resume Next

'textbox2

Dim width, code
Dim WorkbookName As String
Dim WB As Workbook
Dim Sht As Worksheet
Dim Rng As Range


WorkbookName = "Bancodedados.xlsx"

' set the workbook object
On Error Resume Next
Set WB = Workbooks(WorkbookName) ' first try to see if the workbook already open
On Error GoTo 0
If WB Is Nothing Then ' if workbook = Nothing (workbook is closed)
    Set WB = Workbooks.Open("C:\Users\arthurg\Documents\FERRAMENTAS\" & WorkbookName)
End If

' set the worksheet object
Set Sht = WB.Sheets("DMG850V")

' set the Range object
Set Rng = Sht.Range("A1:K20000")


' verify that Vlookup found code in the Range
On Error Resume Next
If Not IsError(Application.Vlookup(CLng(Me.TextBox1), Rng, 2, False)) Then
With Me
    TextBox2 = Application.Vlookup(CLng(Me.TextBox1), Rng, 2, False)
    End With

Else
    MsgBox "Ferramenta não encontrada" & ", entrar em contato com Engenharia"
End If

'textbox3

' set the workbook object
On Error Resume Next
Set WB = Workbooks(WorkbookName) ' first try to see if the workbook already open
On Error GoTo 0
If WB Is Nothing Then ' if workbook = Nothing (workbook is closed)
    Set WB = Workbooks.Open("C:\Users\arthurg\Documents\FERRAMENTAS" & WorkbookName)
End If

' set the worksheet object
Set Sht = WB.Sheets("Descrição")

' set the Range object
Set Rng = Sht.Range("A:C")

' verify that Vlookup found code in the Range

On Error Resume Next
If Not IsError(Application.Vlookup(CLng(Me.TextBox2), Rng, 2, False)) Then
With Me
    TextBox3 = Application.Vlookup(CLng(Me.TextBox2), Rng, 2, False)
    End With

Else
    MsgBox "Ferramenta não encontrada" & ", entrar em contato com Engenharia"
End If

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

CDbl() работал для меня

With Me
    ....
    .TextBox3 = Application.VLookup(CDbl(.TextBox2), rng, 2, False)
    ....
End With
0 голосов
/ 08 июня 2018

Не ответ, но слишком длинный для комментария.

Это запустит ваш поиск дважды:

' verify that Vlookup found code in the Range
On Error Resume Next '<< not needed
If Not IsError(Application.Vlookup(CLng(Me.TextBox1), Rng, 2, False)) Then
With Me
    TextBox2 = Application.Vlookup(CLng(Me.TextBox1), Rng, 2, False)
    End With

Else
    MsgBox "Ferramenta não encontrada" & ", entrar em contato com Engenharia"
End If

Это чище:

Dim res
'no need for any error trapping here...
res = Application.Vlookup(CLng(Me.TextBox1), Rng, 2, False)
If Not IsError(res) Then
    Me.TextBox2 = res
Else
    MsgBox "Ferramenta não encontrada" & ", entrar em contato com Engenharia"
End If
...