Я хочу сохранить некоторый статус в VBA (Excel), используя словарь, но у меня возникли проблемы с доступом к нему в другом подпункте.
В конце я хочу использовать вложенный словарь, содержащий идентификаторы в качестве первичных ключей и длядля каждого идентификатора мне нужно несколько сообщений о состоянии с соответствующей отметкой времени:
Example: {ID_1: {status_1: 09.10.19 06:47, status_2: 09.10.19 07:00,...}, ID_2:{status_6: 09.10.19 06:30, status_1: 09.10.19 06:20}}
До сих пор я просто пытался получить простой словарь, содержащий только идентификатор и статус:
Option Explicit Public dict As Scripting.Dictionary Public id As Integer
Public Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
Dim current_status As String
current_status = Tabelle4.Range("B11").Value
id = Tabelle3.Cells(7, 6).Value
Application.EnableEvents = False
If Not Intersect(Target, Range("C12:G12")) Is Nothing Then
If dict Is Nothing Then
Set dict = New Scripting.Dictionary
dict.Add (id), current_status
'Checks if inner dict exists
ElseIf Not dict(id).Exists Then
dict.Add (id), current_status
End If
End If
Fin:
Application.EnableEvents = True
End Sub
Обратите внимание, что я меняю ID вручную, и current_status будет сгенерирован в B11 путем изменения одного из значений в C12 на G12 (именно поэтому я использовал событие Change). В конце я хочу сохранить записи обо всех обновлениях состояния, которые происходят, и отслеживать, когда они происходят.
Моя проблема заключается в том, что это работает для 1 записи. Я могу создать одну запись в части «Если dict is Nothing Then» и могу получить к ней доступ даже после события. (например, вставка MsgBox dict (ID) в начале перед повторным вызовом события.) Я также хочу напечатать результат, используя кнопку в моем Excel. Однако, когда я звоню:
Public Sub print_dict()
MsgBox dict(id)
End Sub
, я получаю сообщение об ошибке, что dict не определено. «MsgBox id» возвращает пустой MsgBox.
Может быть, кто-то может мне помочь. Я довольно новичок в VBA и все еще борюсь с ним: D
Приветствия!