سؤال

I have set up three arrays in Word. The arrays are as follows:

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")

I have made a user form which get a TAC (Value) from the User. Can I get this value and search for it in the first array and get its ID so that I can get the make and model from the other two arrays? I have tried using some code samples that I found but they do not seem to work with Word throwing errors. They were things like Application.Match.

On a side note, would there be a better way to store this information rather than three arrays?

هل كانت مفيدة؟

المحلول

I think you need a collection object. Look at the code below

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

It works with a new class called 'Phone' containing

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

and inserted into VBA via this menu item, and renaming in the project tree as "Phone"
enter image description here

The requirement is that the 'TAC' code is unique. In your case it wasn't and I had to change some numbers to make them unique. How have to consider what to do if in real life there are multiple phones with the same TAC code.

PS. Welcome to the world of object oriented programming. This was your first step.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top