Error 381 listbox.list VBA

Asked

Viewed 1,488 times

0

Hello! Basically I need to add up the values of listbox, only my program is showing the following error.

Runtime error '381': Could not fetch List property. Invalid property array index.

Private Sub TextBox1_AfterUpdate()

Dim linhalistbox As Integer
Dim linha As Integer
Dim i As Integer
Dim soma As Integer

linhalistbox = Me.ListBox1.ListCount
linha = 2
i = 0

Do Until Plan2.Cells(linha, 1) = ""                         'Loop vai rodar ate encontrar uma celula vazia na coluna dos codigos
    If TextBox1.Text = Plan2.Cells(linha, 1) Then           'Se o textbox1(codigo) for igual ao codigo da celula
        With Me.ListBox1
        .AddItem
        .List(linhalistbox, 0) = linhalistbox + 1           'Coluna 1 do listbox = ao contador de linha do listbox
        .List(linhalistbox, 1) = Plan2.Cells(linha, 3)      'Coluna 2 do listbox = ao descrição do produto
        .List(linhalistbox, 2) = Plan2.Cells(linha, 4)      'Coluna 3 do listbox = ao valor do produto
        Do Until Me.ListBox1.List(i, 2) = ""                'ERRO 
            soma = Me.ListBox1.List(i, 2) + soma            'Soma os valores dentro das celulas da coluna 2
            i = i + 1
        Loop
        TextBox2.Text = linhalistbox + 1                    'Numero de itens
        TextBox5.Text = Plan2.Cells(linha, 4)               'Mostra o valor do produto
        TextBox6.Text = soma                                'Apresenta o sub total
        linhalistbox = linhalistbox + 1
        End With
    End If
    linha = linha + 1
Loop

TextBox1.Text = ""

End Sub
  • In which line does the error occur? But probably with Error 381 you are filling the matrix incorrectly and there is some empty value. Create a [mcve] to make it easier to help, with some dummy data from table

  • The error is on this line: Do until me.listbox1.list(i,2)=""

1 answer

0


The error occurs because there is no item in the list. So either you add an item at the beginning of the list and there will be a null line, with:

Me.ListBox1.AddItem and checks that it is void with: Do Until IsNull(Me.ListBox1.List(i, 2))

Or loop it with: Do Until i = linhalistbox + 1

Code Do Until IsNull(Me.ListBox1.List(i, 2))

Dim linhalistbox As Long
Dim linha As Long
Dim i As Long
Dim soma As Double
Dim ws As Worksheet

Set ws = ThisWorkbook.Worksheets("Planilha2")
linhalistbox = Me.ListBox1.ListCount
linha = 2
i = 0
Me.ListBox1.AddItem
Do Until ws.Cells(linha, 1) = ""             'Loop vai rodar ate encontrar uma celula vazia na coluna dos codigos
    If Me.TextBox1.Text = ws.Cells(linha, 1) Then 'Se o textbox1(codigo) for igual ao codigo da celula
        With Me.ListBox1
            .AddItem
            .List(linhalistbox, 0) = linhalistbox + 1 'Coluna 1 do listbox = ao contador de linha do listbox
            .List(linhalistbox, 1) = ws.Cells(linha, 3) 'Coluna 2 do listbox = ao descrição do produto
            .List(linhalistbox, 2) = ws.Cells(linha, 4) 'Coluna 3 do listbox = ao valor do produto
            Do Until IsNull(Me.ListBox1.List(i, 2))    'ERRO
                soma = Me.ListBox1.List(i, 2) + soma 'Soma os valores dentro das celulas da coluna 2
                i = i + 1
            Loop
            TextBox2.Text = linhalistbox + 1 'Numero de itens
            TextBox5.Text = ws.Cells(linha, 4) 'Mostra o valor do produto
            TextBox6.Text = soma             'Apresenta o sub total
            linhalistbox = linhalistbox + 1
        End With
    End If
    linha = linha + 1
Loop
TextBox1.Text = ""

Code Do Until i = linhalistbox + 1

Dim linhalistbox As Long
Dim linha As Long
Dim i As Long
Dim soma As Double
Dim ws As Worksheet

Set ws = ThisWorkbook.Worksheets("Planilha2")
linhalistbox = Me.ListBox1.ListCount
linha = 2
i = 0

Do Until ws.Cells(linha, 1) = ""             'Loop vai rodar ate encontrar uma celula vazia na coluna dos codigos
    If Me.TextBox1.Text = ws.Cells(linha, 1) Then 'Se o textbox1(codigo) for igual ao codigo da celula
        With Me.ListBox1
            .AddItem
            .List(linhalistbox, 0) = linhalistbox + 1 'Coluna 1 do listbox = ao contador de linha do listbox
            .List(linhalistbox, 1) = ws.Cells(linha, 3) 'Coluna 2 do listbox = ao descrição do produto
            .List(linhalistbox, 2) = ws.Cells(linha, 4) 'Coluna 3 do listbox = ao valor do produto
            Do Until i = linhalistbox + 1    'ERRO
                soma = Me.ListBox1.List(i, 2) + soma 'Soma os valores dentro das celulas da coluna 2
                i = i + 1
            Loop
            TextBox2.Text = linhalistbox + 1 'Numero de itens
            TextBox5.Text = ws.Cells(linha, 4) 'Mostra o valor do produto
            TextBox6.Text = soma             'Apresenta o sub total
            linhalistbox = linhalistbox + 1
        End With
    End If
    linha = linha + 1
Loop
TextBox1.Text = ""
  • Daniel thanks so much for the tips I’ll try. Big hug.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.