Murilo
Testei o novo arquivo e com o ajuste que você efetuou agora esta perfeito show de bola mestre.rs rs rs
No arquivo anterior estava digitando o nome com letra minúscula e não estava pesquisando mas agora percebi que se por exemplo o nome estiver registrado como Ze da padoca se o Z não estiver maiúsculo a pesquisa não é efetuada.
Resumindo para pesquisar o nome deverá estar idêntico ao registrado na plan Dados.
Referente ao tamanho das colunas acho que descobri que era o problema.
Troquei ; por , conforme o código abaixo e funcionou.
Acho que o motivo do erro era que meu OS original estava em inglês e depois eu puxei um language pack para o português.
Private Sub cmd_Pesquisar_Click()
Dim bool As Boolean 'Variável utilizada na Function 'listar' para comparar o retorno da função
Call listar(txt_NoRegistro.Text, txt_Cliente.Text, bool)
If bool = True Then 'Se ao menos um registro foi encontrado na pesquisa da Function:
Unload Me
lista.Show
Else:
End If
End Sub
Private Sub cmd_Voltar_Click()
Unload Me
pesquisar.Show
End Sub
Private Sub UserForm_Initialize()
Sheets("lista").Select
With ListPesquisa
.ColumnCount = 10 'Número de Colunas na ListBox
.RowSource = ActiveSheet.UsedRange.Address 'Fonte de Dados será o intervalo que contém células preenchidas
'Abaixo, defino manualmente o tamanho de cada coluna do ListBox:
.ColumnWidths = "1,8 cm,3,1 cm,2,5 cm,3,1 cm,2cm,2cm,3cm"
End With
Sheets("Dados").Select
End Sub
Private Sub cmd_Fechar_Click()
Unload Me
End Sub
Private Sub cmd_Gravar_Click()
Dim iLastRow As Integer
iLastRow = ActiveSheet.UsedRange.Rows.Count 'Conta o número de linhas preenchidas no arquivo
iLastRow = iLastRow + 1 'valor de iLastRow será a próxima célula (que estará vazia)
'Preencher as células vazias com os valores das TextBoxes:
'-----------
Range("A" & iLastRow).Value = txt_NoRegistro.Text
Range("C" & iLastRow).Value = txt_Cliente.Text
Range("D" & iLastRow).Value = txt_Dia.Text
Range("H" & iLastRow).Value = txt_Responsavel.Text
Range("I" & iLastRow).Value = txt_Control1.Text
Range("J" & iLastRow).Value = txt_Control2.Text
Range("M" & iLastRow).Value = cboMotivo1.Text
Range("N" & iLastRow).Value = cboMotivo2.Text
Range("O" & iLastRow).Value = cboMotivo3.Text
Range("L" & iLastRow).Value = txt_Nascimento.Text
'-----------
ActiveWorkbook.Save 'Salva a pasta de trabalho
End Sub
Private Sub cmd_Limpar_Click()
For Each ctl In Me.Controls 'Para cada objeto de controle
If TypeName(ctl) = "TextBox" Or _
TypeName(ctl) = "ComboBox" Then 'Se o tipo for TextBox OU ComboBox (combo de Motivos)
ctl.Text = vbNullString 'Limpa o conteúdo
End If
Next ctl 'Próximo objeto de controle
txt_Dia.Text = Format(Now, "dd/mm/yyyy") 'Redefine o dia
End Sub
Private Sub cmd_Pesquisar_Click()
Dim bool As Boolean 'Variável utilizada na Function 'listar' para comparar o retorno da função
Call listar(txt_NoRegistro.Text, txt_Cliente.Text, bool)
If bool = True Then 'Se ao menos um registro foi encontrado na pesquisa da Function:
Unload Me
lista.Show
Else:
End If
End Sub
Private Sub UserForm_Click()
'Cria as tags para cada campo (a tag será o valor da coluna na linha 1)
'-----------
txt_Cliente.Tag = "Nome Do Cliente"
txt_NoRegistro.Tag = "No Registro"
txt_Dia.Tag = "Dia Do Registro"
txt_Responsavel.Tag = "Nome Do Responsável"
txt_Control1.Tag = "Controle 1"
txt_Control2.Tag = "Controle 2"
cboMotivo1.Tag = "Motivo 1"
cboMotivo2.Tag = "Motivo 2"
cboMotivo3.Tag = "Motivo 3"
txt_Nascimento.Tag = "Data De Nascimento"
'-----------
End Sub
Private Sub UserForm_Activate()
txt_Dia.Text = Format(Now, "dd/mm/yyyy")
End Sub
Function listar(no_reg As String, nome_cli As String, bool) As Boolean
Dim celula As Range
Dim achou As Boolean 'Será utilizado para verificar se a macro possuirá ao menos 1 registro na lista
Application.ScreenUpdating = False
bool = False 'Atualiza o valor de bool para falso
Sheets("Lista").Rows.Clear 'Limpa a Lista que contém os dados da Pesquisa
Sheets("Dados").Rows("1:1").Copy Sheets("Lista").Rows("1:1") 'Copia o cabeçalho (linha 1) da sheet Dados
If no_reg = "" And nome_cli = "" Then
MsgBox "O cliente e/ou nº de registro não foi informado", vbInformation
Exit Function 'Sai da macro, caso as textbox estejam vazias (não é possível realizar o filtro)
Else:
achou = False 'Valor da booleana será falso
iLastRow = Sheets("Dados").UsedRange.Rows.Count 'Conta o número de linhas preenchidas no arquivo
For Each celula In Sheets("Dados").Range("A2:A" & iLastRow)
If celula.Value = no_reg Or InStr(1, celula.Offset(0, 2).Value, nome_cli) > 0 Then 'Compara o valor do textbox com as celulas
achou = True 'Achou ao menos um registro para a lista
With Sheets("Lista")
.Activate 'Seleciona a sheet Lista
celula.EntireRow.Copy .Rows(.UsedRange.Rows.Count + 1) 'Copia a célula atual do laço para a próxima celula em branco da lista
End With
End If
Next
Call deleta_Cols 'Chama a Sub que deleta colunas indesejadas da lista
If achou = False Then 'Se não foram encontrados nenhum registro com o nº de registro e cliente informados:
MsgBox "Não foram encontrados nenhum registro com o cliente '" & pesquisar.txt_Cliente.Text & _
"' ou nº de registro '" & pesquisar.txt_NoRegistro.Text & "'"
bool = False 'False (não continuará a macro de pesquisa, pois não foram encontrados resultados)
Sheets("Dados").Select
Exit Function 'Sai da Macro
Else: 'Caso a sheet Lista possua ao menos um registro:
'Unload Me 'Fecha o Form
bool = True 'Continuará a pesquisa
End If
End If
Application.ScreenUpdating = False
End Function
Sub deleta_Cols()
Dim i, iLastCol As Long
With Sheets("Lista")
.Select
iLastCol = ActiveSheet.UsedRange.Columns.Count 'Conta o número de colunas preenchidas na lista
For i = 1 To iLastCol
If .Cells(1, i).Value = "Sufixo" Or _
.Cells(1, i).Value = "Referência" Or _
.Cells(1, i).Value = "Tipo De Pedido" Or _
.Cells(1, i).Value = "Valor" Or _
.Cells(1, i).Value = "Estoque" Then
.Cells(1, i).EntireColumn.Delete 'Deleta a coluna inteira
i = 0 'Procura novamente as colunas desde o início
End If
Next i
End With
End Sub
Finalmente depois de sua generosa ajuda poderei trabalhar usando esse novo formulário.
Muito obrigado mestre Murilo e até a próxima. rs rs rs
Abraços
Fabiosp
Postado : 07/05/2014 3:56 pm