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