Использование InStr в Access VBA для поиска строкового значения из другой таблицы - PullRequest
0 голосов
/ 17 октября 2019

Очень плохо знаком с VBA и хотел бы получить некоторые советы по этому вопросу.

Я ищу строку и ищу определенную подстроку в этом поле. Эта подстрока будет иметь значение, основанное на другой таблице, например

order = "Базовый порядок QQ131415"

Проблема в том, что для номеров заказов нет конкретного шаблона. У некоторых 7 цифр, у некоторых 10, а у некоторых там тире.

Есть таблица, к которой у меня тоже есть доступ, но с этими порядковыми номерами, и я думаю, что пытаюсь использовать эту таблицу в качестве словаря.

мой очень простой код Access VBA выглядит следующим образом:

'order = Instr (1, rst! [Order], qst! [Order_id], vbBinaryCompare)'

order - это строка, в которой у меня есть идентификатор заказа, который я пытаюсь извлечь, order_id - это фактический идентификатор из отдельной таблицы.

Это то, что может обрабатывать Access VBA?

1 Ответ

0 голосов
/ 17 октября 2019

Так что я думаю, что это поможет вам

Вам не очень ясно в предложении, следующем за "order =" с вашим кодом. Не могли бы вы прояснить это.

Instr (строка1, строка2, [сравнить])

строка1 Требуется. Строковое выражение в поиске. string2 Обязательный. Ищется строковое выражение.

Instr возвращает Variant (в данном случае число), указывающий позицию первого вхождения одной строки в другой. Так и должно быть: Position = InStr (1, string1, string2, 1)

Итак, теперь вы знаете, что порядковый номер начинается с позиции x в Order. Затем вам нужно будет сделать левый (Order, Len (order) -x), чтобы извлечь строку.

Вы можете сделать это во вложенном цикле, потому что вам придется просматривать свой словарь по каждой записи в порядке.

Например,

Dim rsOrder as DAO.recordset
Dim rsOrderId as Dao.recordset
dim orderTest as integer
dim stringcapture as string

Set rsOrder = Currentdb.OpenRecordset("[SELECT STRING]")
rsOrder.Movefirst

Do until rsOrder.EOF or rsOrder.BOF
    Order = rsOrder![OrderFieldName]
    Set rsOrderId = Currentdb.OpenRecordSet("[SELECT STRING]")
    rsOrderID.Movefirst
    Do Until rsOrderID.EOF or rsOrderID.BOF
        OrderID = rsOrderID![OrderIDFieldName]
        orderTest = Instr(1, Order, OrderID,1)
        StringCapture = left(Order, Len(order) -OrderTest)
    rsOrderID.movenext
    Loop
rsOrder.movenext
Loop
rsOrder.close
rsOrderID.close

Что-то на это влияет.

...