Página 1 de 2

[Resolvido]Formulário "Out of range"

Enviado: Seg Nov 04, 2019 7:59 pm
por Rui Maciel
Boa noite minha boa gente
Podem ajudar-me na solução do problema que tenho com o userform4, pois, não consigo que ele execute, dá erro 9, "out of rage", por mais voltas que faça não chego lá. O que pretendo com este formulário é das abas de 1 a 12 retirar quais os clientes que estão em falta na coluna "G", tendo por base a palavra "Vencido" da coluna "H".
Desde já obrigado e grato pela vossa paciência e amabilidade.
RMaciel

Re: Formulário "Out of range"

Enviado: Qua Nov 06, 2019 7:43 pm
por Rui Maciel
Boa noite
Alguma ideia de como implementar?
Grato
RMaciel

Re: Formulário "Out of range"

Enviado: Qua Nov 06, 2019 10:15 pm
por Reinaldo
Primeiro suas palnilhas tem numeros "01"/"02".. e combobox recebe/devolve 1/2/3/....
é preciso ajustar/compatibilizar isso.

Re: Formulário "Out of range"

Enviado: Qui Nov 07, 2019 6:47 am
por Rui Maciel
Bom dia e obrigado Reinaldo, era isso mesmo, grato.
No entanto, aparecem todas as linhas e somente queria que só devolvesse as linhas onde tem "Vencido".
RMaciel

Re: Formulário "Out of range"

Enviado: Qui Nov 07, 2019 8:53 am
por Reinaldo
Experimente utilizar a rotina <ComboBox1_Change> alterada conforme abaixo:

Código: Selecionar todos

Private Sub ComboBox1_Change()
Dim REGISTROS(8 To 154, 2 To 8) As String
Dim linha As Long, LINHA2 As Long
Dim R As Integer

If Me.ComboBox1.ListIndex >= 0 Then
    ListBox1.ColumnCount = 6
    LINHA2 = 8
    For linha = 9 To Sheets(ComboBox1.Value).Cells(Rows.Count, 8).End(xlUp).Row
        If UCase(CStr(Sheets(ComboBox1.Value).Cells(linha, "H").Value)) = "VENCIDO" Then
            For R = 2 To 8
            REGISTROS(LINHA2, R) = CStr(Sheets(ComboBox1.Value).Cells(linha, R).Value)
            Next R
            LINHA2 = LINHA2 + 1
        End If
    Next linha
    ListBox1.List = REGISTROS
End If
End Sub[/code~]

Re: Formulário "Out of range"

Enviado: Sex Nov 08, 2019 6:42 pm
por Rui Maciel
Boa noite e obrigado Reinaldo, você é muito bom em vba, obrigado.
Só precisava de mais uma ajudinha, ou seja, através do userform pesquisar, pretendia que ao selecionar o nome na combobox (que estão na coluna 3 das folhas), a pesquisa percorresse as folhas de 1 a 12 e lançasse na listbox os meses vencidos do nome selecionado na combobox.
Agradecido grato,
RMaciel

Re: Formulário "Out of range"

Enviado: Sex Nov 08, 2019 8:19 pm
por Reinaldo
Experimente alterando a rotina "ComboBox1_Change" do Formulario <ufm_pesquisar> conforme abaixo:

Código: Selecionar todos

Private Sub ComboBox1_Change()
Dim REGISTROS(8 To 154, 2 To 8) As String
Dim linha As Long, LINHA2 As Long
Dim X As Integer, R As Integer

If Me.ComboBox1.ListIndex >= 0 Then
    ListBox1.ColumnCount = 7
    LINHA2 = 8
    For X = 1 To 12
        For linha = 9 To Sheets(X).Cells(Rows.Count, 3).End(xlUp).Row
            If UCase(CStr(Sheets(X).Cells(linha, "C").Value)) = ComboBox1.Value And UCase(CStr(Sheets(X).Cells(linha, "H").Value)) = "VENCIDO" Then
                For R = 2 To 8
                    REGISTROS(LINHA2, R) = CStr(Sheets(X).Cells(linha, R).Value)
                Next R
                LINHA2 = LINHA2 + 1
            End If
        Next linha
    Next X
    ListBox1.List = REGISTROS
End If
End Sub

Re: Formulário "Out of range"

Enviado: Sex Nov 08, 2019 8:54 pm
por Rui Maciel
Muito obrigado Reinaldo, muito bom, você é mestre.
Eu estava a consolidar para uma folha e depois pesquisava, mas a forma como você implementou é muito boa.
Agradecido,
RMaciel

Re: [Resolvido]Formulário "Out of range"

Enviado: Sex Nov 08, 2019 9:29 pm
por Rui Maciel
Só alterei no código o seguinte para formatar algumas colunas da listbox para moeda:

Dim REGISTROS(8 To 154, 2 To 8) As String
Dim linha As Long, LINHA2 As Long
Dim X As Integer

If Me.ComboBox1.ListIndex >= 0 Then
LINHA2 = 8
For X = 1 To 12
For linha = 9 To Sheets(X).Cells(Rows.Count, 3).End(xlUp).Row
If UCase(Sheets(X).Cells(linha, "C").Value) = ComboBox1.Value And UCase(Sheets(X).Cells(linha, "H").Value) = "VENCIDO" Then

REGISTROS(LINHA2, 2) = Sheets(X).Cells(linha, 2).Value
REGISTROS(LINHA2, 3) = Sheets(X).Cells(linha, 3).Value
REGISTROS(LINHA2, 4) = Format(Sheets(X).Cells(linha, 4).Value, "currency")
REGISTROS(LINHA2, 5) = Format(Sheets(X).Cells(linha, 5).Value, "currency")
REGISTROS(LINHA2, 6) = Sheets(X).Cells(linha, 6).Value
REGISTROS(LINHA2, 7) = Format(Sheets(X).Cells(linha, 7).Value, "currency")
REGISTROS(LINHA2, 8) = Sheets(X).Cells(linha, 8).Value

LINHA2 = LINHA2 + 1
End If
Next linha
Next X
ListBox1.List = REGISTROS
End If
End Sub

Obrigado mais uma vez.
RMaciel

Re: Formulário "Out of range"

Enviado: Dom Nov 10, 2019 7:50 am
por Rui Maciel
Bom dia
Reabri o tópico, pois, nos userform´s 1 e 4 quando pretendo saber o que cada cliente pagou ou quanto se recebeu naquele mês, não sai a informação correta, isto é, se algum cliente pagou só uma parte dos seus honorários (valor inscrito na coluna ""E") e como na coluna "H" está inscrito "Vencido", não aparece na listbox do userform. Tem forma de como solucionar, é que já pesquisei e não encontro uma hipótese para finalizar.
Grato desde já,
RMaciel