Создать справочную таблицу или массив внутри кода - PullRequest
0 голосов
/ 06 марта 2020

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

Я не смог выяснить, как это сделать, приведенный ниже код является чем-то вроде того, что я ищу, Я думаю, может быть, использование массива, но я не могу понять, как использовать его так, как я хочу.

Я знаю, что это не работает, но я пытаюсь сделать что-то подобное ниже, чтобы когда я набираю =GetCode(415) результат будет 001

  Function GetCode(LocationNum As String) As String
  Dim Result As String

  'Built in reference table
  '
  '{   "415" : "001"
  '    "500" : "002"
  '    "605" : "003"
  '                   }

  Dim varData(2) As Variant
  varData("415") = "001"
  varData("500") = "002"
  varData("605") = "003"

  Result = varData(LocationNum)

  GetCode = Result

  End Function

1 Ответ

2 голосов
/ 06 марта 2020

Как уже упоминал Натан_Сав, вы можете использовать коллекцию или словарь, которые намного эффективнее. Вот пример использования объекта словаря. Обратите внимание, что он использует раннее связывание, поэтому вам нужно установить ссылку на библиотеку Microsoft Scripting Runtime (Visual Basic Editor >> Tools >> Reference).

Option Explicit

Sub test()

    'set a reference (VBE >> Tools >> Reference) to the Microsoft Scripting Runtime library

    'declare and create an instance of the dictionary object
    Dim dic As Scripting.Dictionary
    Set dic = New Scripting.Dictionary

    'set the comparison mode for the dictionary to a case-insensitive match
    dic.CompareMode = TextCompare

    'add keys and associated items to the dictionary
    dic.Add Key:="415", Item:="001"
    dic.Add Key:="500", Item:="002"
    dic.Add Key:="605", Item:="003"

    'print to the immediate window the item associated with the specified key
    Debug.Print dic("415")

    'clear from memory
    Set dic = Nothing

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...