Поиск массива в Word (Visual Basic для приложений) - PullRequest
1 голос
/ 19 мая 2011

Я установил три массива в Word. Массивы выглядят следующим образом:

tacData = Array("32064600", "33001000", "33001100", "33002400", "33003000", "33002400", "35011001", "35013200", "35124100", "35124100")
makeData = Array("Alcatel", "Alcatel", "Sagem", "Samsung", "AEG Mobile", "Samsung", "Nokia", "Maxon", "Siemes", "Nokia")
modelData = Array("One Touch EasyHD", "91009109MB2", "RC410G14", "SGH-200", "Sharp TQ6", "SGH-5300", "DCT-3", "MX6832", "MC399 Cellular Termnial", "DCT-4")

Я создал пользовательскую форму, которая получает TAC (Value) от пользователя. Могу ли я получить это значение и найти его в массиве first и получить его идентификатор, чтобы я мог получить марку и модель из двух других массивов? Я попытался использовать некоторые примеры кода, которые я нашел, но они, кажется, не работают с ошибками бросания Word. Это были такие вещи, как Application.Match.

Кстати, есть ли лучший способ хранить эту информацию, а не три массива?

1 Ответ

3 голосов
/ 19 мая 2011

Я думаю, вам нужен объект коллекции. Посмотрите на код ниже

Dim tacData() As Variant, makeData() As Variant, modelData() As Variant
tacData = Array("32064600", "33001000", "33001100", "33002400", "33003000", "33002401", "35011001", "35013200", "35124100", "35124101")
makeData = Array("Alcatel", "Alcatel", "Sagem", "Samsung", "AEG Mobile", "Samsung", "Nokia", "Maxon", "Siemes", "Nokia")
modelData = Array("One Touch EasyHD", "91009109MB2", "RC410G14", "SGH-200", "Sharp TQ6", "SGH-5300", "DCT-3", "MX6832", "MC399 Cellular Termnial", "DCT-4")

Dim i As Integer, N As Integer
N = UBound(tacData, 1) 'Get the data size
Dim item As Phone      'Temp variable for creating elements into a collection

Dim list As New VBA.Collection  'Define a new collection
For i = 1 To N
    Set item = New Phone        'Assign a new Phone object
    With item
        .TAC = tacData(i)       'Assign values to the phone
        .Make = makeData(i)
        .Model = modelData(i)
    End With
    list.Add item, item.TAC     'Add the phone to the list with a KEY
    Set item = Nothing
Next i

Dim TAC As String
TAC = "33002400"                'get user input

Set item = list(TAC)            '** lookup Phone using Key **

If Not item Is Nothing Then     ' Show results
    Debug.Print item.TAC, item.Make, item.Model
Else
    Debug.Print "Not Found"
End If

Работает с новым классом Phone, содержащим

Option Explicit    
Public TAC As String
Public Make As String
Public Model As String

и вставляется в VBA через этот пункт меню и переименовывается в дереве проекта как «Телефон»
enter image description here

Требуется, чтобы код TAC был уникальным. В вашем случае это не так, и мне пришлось изменить некоторые цифры, чтобы сделать их уникальными. Как решить, что делать, если в реальной жизни есть несколько телефонов с одинаковым кодом TAC.

PS. Добро пожаловать в мир объектно-ориентированного программирования. Это был твой первый шаг.

...