Использование словаря для нескольких сабвуферов в VBA - PullRequest
0 голосов
/ 01 мая 2020

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

Private Sub CommandButton2_Click()

ID = Me.TextBox1.Value
Dim rwd As Worksheet
Set rwd = ThisWorkbook.Sheets("Raw Data")


If Application.WorksheetFunction.CountIf(summ.Range("A:A"), Me.TextBox4.Value) > 0 Then
    Dim rowsDict As Object
    Set rowsDict = CreateObject("Scripting.Dictionary")
    Dim counter As Long
    counter = 1
    For i = 2 To rwd.Range("A" & Application.rows.Count).End(xlUp).Row
        If rwd.Range("A" & i).Value = ID Then
            RowAndNumber = CStr(counter) & "-" & (rwd.Range("J" & i).Value)
            Me.ComboBox3.AddItem (RowAndNumber)
            rowsDict.Add RowAndNumber, i '
            counter = counter + 1
        End If
    Next
End Sub

Private Sub ComboBox3_Change()

    n = rowsDict.Item(Me.ComboBox3.Value)
    Me.bTextBox131.Value = rwd.Range("J" & n).Value
End Sub

1 Ответ

3 голосов
/ 01 мая 2020

Вам необходимо объявить словарь в области видимости модуля

' Move your declaration to outside your Sub
Dim rowsDict As Object
Private Sub CommandButton2_Click()
    ID = Me.TextBox1.Value
    Dim rwd As Worksheet
    Set rwd = ThisWorkbook.Sheets("Raw Data")

    If Application.WorksheetFunction.CountIf(summ.Range("A:A"), Me.TextBox4.Value) > 0 Then
        Set rowsDict = CreateObject("Scripting.Dictionary")
        Dim counter As Long
        counter = 1
        For i = 2 To rwd.Range("A" & Application.rows.Count).End(xlUp).Row
            If rwd.Range("A" & i).Value = ID Then
                RowAndNumber = CStr(counter) & "-" & (rwd.Range("J" & i).Value)
                Me.ComboBox3.AddItem (RowAndNumber)
                rowsDict.Add RowAndNumber, i '
                counter = counter + 1
            End If
        Next
    ' You're also missing an End If
    End If
End Sub

Private Sub ComboBox3_Change()
    n = rowsDict.Item(Me.ComboBox3.Value)
    Me.bTextBox131.Value = rwd.Range("J" & n).Value
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...