У меня есть рабочая книга с кодами продуктов и названиями. Внутри формы находятся различные текстовые поля, в которые пользователь может ввести код, и соответствующая метка будет обновлена в соответствии с именем, найденным в книге. Каждое текстовое поле выполняет следующую подпрограмму при изменении
Private Sub FindItem(x As Long)
Dim Name As Variant
Name = Application.VLookup(AddStockForm.Controls("Code" & x).Text, Sheet1.Range("B:C"), 2, False)
If IsError(Name) Then
AddStockForm.Controls("Name" & x).Caption = "Unknown Code"
Else
AddStockForm.Controls("Name" & x).Caption = Name
End If
End Sub
Подпрограмма принимает пользовательский ввод в целевом поле (например, Code1) и находит соответствующее имя и записывает его в метку (например, Name1). ОДНАКО, коды продуктов представляют собой либо строки, либо буквенно-цифровые и простые тексты, либо цифры. По глупым причинам, не зависящим от меня, некоторые коды должны быть числами, другие должны содержать буквы.
Этот код работает ОТЛИЧНО для любого кода с символом в нем (MYCODE или 500A), но не чисел, он пишет «Неизвестный код» для любого числа, и они находятся в диапазоне поиска. Я искал вокруг stackoverflow и ответы предлагают объявить как варианты, я сделал это, даже назначив Controls().Text
как вариант, прежде чем использовать его в VLookup. Я подозреваю, что проблема в
AddStockForm.Controls("Code" & x).Text
является строкой. Но я не могу преобразовать в INT, потому что пользовательский ввод может быть числом или строкой.
Есть идеи?