/ / Alterar os valores da matriz dependendo das seleções na caixa de listagem em um formulário de usuário - vba, excel-vba, excel

Altere os valores da matriz dependendo das seleções na caixa de listagem em um formulário do usuário - vba, excel-vba, excel

Eu quero ser capaz de alterar os valores da matriz do meu sub que executa um formulário de usuário. Como faço para fazer isso?

Aqui está um exemplo do que eu tenho:

A = [25, 50, 75, 100]
UserForm1.Show

UserForm1 contém uma caixa de listagem com as opções 1, 2 ou 3.
Ao selecionar "1", "2,", "3" ou várias combinações deles, quero alterar o valor de A de acordo.

If "1" is selected Then
A(0) = 10
If "2" is selected Then
A(1) = 0
If "3" is selected Then
A(2) = 1000

Como eu faria isso acontecer? Agradecemos antecipadamente por qualquer ajuda.

Respostas:

1 para resposta № 1

Isso é testado em um ListBox_AfterUpdate() evento. Controle o ListBox objeto (atribuído à variável lb), em seguida, itere os itens no lb.List, verificando se cada um está selecionado. Se selecionado, atribua um valor posicional à matriz A.

O array A é declarado como uma variável de escopo de formulário de módulo / usuário aqui, e valores padrão / iniciais atribuídos durante o formulário "s _Initialize evento. Esses valores são então alterados se o usuário fizer uma seleção (ões) na ListBox.

Option Explicit
Dim A()
Private Sub UserForm_Initialize()
"Assigns initial values to your array:
A = Array(25, 50, 75, 100)
"Assigns the default ListBox items:
Me.ListBox1.List = Array("1", "2", "3")
End Sub
Private Sub ListBox1_AfterUpdate()
Dim lb As MSForms.ListBox
Dim i As Long, v As Long
Set lb = Me.ListBox1 "# Modify as needed
For i = 0 To lb.ListCount - 1
If lb.Selected(i) Then
Select Case lb.List(i)
Case "1"
v = 10
Case "2"
v = 0
Case "3"
v = 1000
End Select
"confirm prev & new values for array:
MsgBox (A(i) & " will be changed to: " & v)
A(i) = v
"Confirm the value in array has changed
MsgBox (A(i))
End If
Next
End Sub

Dependendo de onde / quando você inicializa o A array, você pode modificar isso e invocá-lo a partir do ListBox_Change ou ListBox_AfterUpdate ou chame-o de outro procedimento de evento de controle, conforme necessário.