Notifications
Clear all

ERROS EM ALGUMAS MACROS

17 Posts
2 Usuários
0 Reactions
4,592 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom pessoal fiz um controle com macros e formulas, mas esta aparecendo alguns erros e não estou conseguindo encontrar ou eliminar estes erros, segue 3 erros abaixo:
Na Aba Menu no Excel tem botão Menu clique e selecione o botão lançamento para aparecer formulário.

1-No formulário frmCadastroStudents quando avanço para o ultimo dado e seleciono cadastro novo esta aparecendo a mensagem: Erro em tempo de execução '381: Não foi possível obter a propriedade list. Índice de matriz de propriedade inválido. Fim - Depurar
O erro esta aparecendo com destaque em amarelo:
Call CarregaMunicipios(Me.cmbUF.List(Me.cmbUF.ListIndex ))

2-Quando peço um novo cadastro e vou adicionar imagem, quando decido em não colocar a imagem e clico no botão cancelar do loadpicture esta aparecendo a mensagem: Erro em tempo de execução '53: O arquivo não foi localizado. Fim - Depurar
O erro esta destacando em amarelo
Me.Image1.Picture = LoadPicture(myPictName)

3-Quando peço um novo cadastro não esta aparecendo o número deste novo cadastro.
Label = lblCod

silva_jmp

 
Postado : 10/01/2013 7:49 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Por partes:
Referente ao problema apontado de numero 1.

Deve-se ao fato de que o combo estado (sigla) é limpo, e a rotina cmbUF_Change e acionada porem o index é nulo.
Altere conforme abaixo que deve resolver.

Private Sub cmbUF_Change()
    cmbUF = UCase(cmbUF)
If cmbUF <> "" Then
    Call CarregaMunicipios(Me.cmbUF.List(Me.cmbUF.ListIndex))
End If
End Sub

Referente ao problema apontado numero 2.
Não há tratamento para o cancelamento, portanto a rotina "tenta" carregar uma imagem inexistente, obviamente gerando erro; então é necessario prever o que fazer se houver esse cancelamento.
Uma possibilidade(da maneira abaixo, se houver o cancelamento a rotina sai do carregamento de imagem):

Private Sub Image1_Click()
    Dim myPictName  As String
    Dim lLinha      As Long
    
    myPictName = Application.GetOpenFilename(filefilter:="Picture Files,*.ico;*.bmp;*.jpeg;*.jpg")
    
    If myPictName <> "Falso" Then
        If IsNumeric(lblCod.Caption) = True Then
            Set currentFind = Worksheets("Dados").Range("A:A").Find(lblCod.Caption, , _
                Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, _
                Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)
    
            lLinha = currentFind.Row
        Else
            lLinha = Sheets("Dados").Cells(Rows.Count, 1).End(xlUp).Row + 1
        End If
        
        If myPictName <> "" Then
            Me.Image1.Picture = LoadPicture(myPictName)
            Image1.PictureSizeMode = fmPictureSizeModeStretch
            Image1.Visible = False
            Image1.Visible = True
            Worksheets("Dados").Cells.Range("T" & lLinha).Value = myPictName
        End If
    End If
    
End Sub

Referente ao problema apontado numero 3.
Seu programa/rotina está retornando/gerando o numero de codigo quando da operação de salvar o registro novo, portanto se não for confirmado o codigo não é gerado.

 
Postado : 10/01/2013 10:52 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo, valeu por me ajudar, deu certo, todas as dicas. :lol:

silva_jmp

 
Postado : 10/01/2013 11:59 am
(@gamboaisrael)
Posts: 68
Trusted Member
 

Prezados, Reinaldo e silva_jmp.

Ontem, ne expectativa de poder ajudar, baixei a planilha anexada pelo companheiro silva_jmp. Contudo, as opções presentes na ação de clicar com o botão direito do mouse dentro da planilha se extendeu a toda a aplicação do excel. Eu já exclui o arquivo e apesar disso quando clico com o botão direito em qualquer outro arquivo do Excel me aparecem as opções que existiam na planilha anexa a este tópico e as outras opção padrões do excel sumiram (Como formatar célula, por ex).

Como devo proceder para retirar isso e o controle voltar ao normal?

Atenciosamente,

gamboaisrael.

 
Postado : 11/01/2013 7:48 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Se não me engano e : Application.CommandBars("Cell").reset

 
Postado : 11/01/2013 1:00 pm
(@gamboaisrael)
Posts: 68
Trusted Member
 

Vou testar na segunda-feira, Reinaldo.

Muito obrigado.

Att.,

 
Postado : 11/01/2013 6:59 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

gamboaisrael/Reinaldo

Na minha opinião de leigo, eu acho que não sege Application.CommandBars("Cell").Reset, pois no código que estou usando tem e se eu abro outro arquivo no excel aparece as opções do projeto, se souberem qual e outra alternativa, compartilhe...

Sub MenuSuspenso()
    Application.CommandBars("Cell").Reset
    
    Dim cbc As CommandBarControl...
    

Desde já agradeço...

silva_jmp

 
Postado : 11/01/2013 9:53 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pessoal tá difícil eu terminar este projeto, nos testes observei que o número do registro do frmCadastroSudents esta pegando o registro número 10 e no botão ultimo não esta avançando para ultimo dado, e o mesmo esta acontecendo no frmCadClientes, e quando executo ambos frms esta aparecendo a mensagem abaixo:

Erro de compilação
Nome repetido encontrado: LinhaAtual

Private Sub UserForm_Activate()
    lsDesabilitar1
    lsLocalizaRegistroStudent1 (Worksheets("Clientes").Cells(2, 1).Value)
    LinhaAtual = 2
    Sheets("Menu no Excel").Activate
End Sub

Por favor tem como vocês fazerem os testes de preeenchimento e verificar os erros correntes.

Desde já agradeço.

silva_jmp

 
Postado : 12/01/2013 12:29 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

No formulario CadastroStudents (não olhei o outro mas deve ser similar)

frmCadastroSudents esta pegando o registro número 10

Altere na rotina o numero da linha onde os dados iniciais estão sendo "pegos" (esta 2 deve ser 5)

Private Sub UserForm_Activate()
    lsDesabilitar
    lsLocalizaRegistroStudent (Worksheets("Dados").Cells(5, 1).Value)
    LinhaAtual = 1
    Sheets("Menu no Excel").Activate
End Sub

o botão ultimo não esta avançando para ultimo dado

Altere a rotina conforme abaixo:

Private Sub cmdUltimo_Click() 'Bt >>
Dim iTotalLinhas As Long
    iTotalLinhas = Sheets("Dados").Cells(Rows.Count, 1).End(xlUp).Row
    lsLocalizaRegistroStudent (Worksheets("Dados").Cells(iTotalLinhas, 1).Value)
    Sheets("Menu no Excel").Activate
End Sub

esta aparecendo a mensagem Erro de compilação Nome repetido encontrado: LinhaAtual

Linhaatual está definida comopublica/global nos modulo 1 e 2, deve ser declarada uma unica vez; então elimine uma das declarações

 
Postado : 13/01/2013 6:06 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo obrigado novamente por me dar esta força, mas vou precisar sua ajuda novamente, segue os problemas atuais:

1) No frmCadastroStudent gostaria que combo(cmbClientes) busca-se os dados da planilha usando rowsource na macro com atualização após o cadastramento de novo clientes no frmCadClientes;

2) Na Plan7(Dados) coloquei uma macro para fazer o filtro dos dados salvos após o preenchimento do frmCadastroStudents, porém quando salvo esta aparecendo os filtros na tema principal, e observando os dados foram para o lugar certo, mas apareceu mais essa.

3) No frmCadClientes esta acontecendo o mesmo erro no cmbUltimo, usei o mesmo procedimento do outro mas não deu certo esta aparecendo a mensagem: Erro em tempo de execução '13: Tipos incompatíveis

silva_jmp

 
Postado : 13/01/2013 7:11 pm
(@gamboaisrael)
Posts: 68
Trusted Member
 

Bom dia, Reinaldo e silva_jmp.

O código

Application.CommandBars("Cell").reset

funcionou perfeitamente.

Muito obrigado.

Atenciosamente,

 
Postado : 14/01/2013 6:10 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo ainda continuo com problema no meu projeto, da uma olha na minha postagem anterior.

silva_jmp

 
Postado : 14/01/2013 8:27 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

referente ao topico 1 = não entendi o que deseja.

referente ao topico2: Não tenho condições de repetir seus tetes/erros, mas tente selecionar a planilha antes de excutar o filtro

Private Sub Worksheet_Change(ByVal Target As Range)
Dim d1 As Long
Dim d2 As Long
Sheets("Dados").Activate
d1 = Range("A2")

referente ao topico 3 = A mensagem de erro não tem nada há ver com a rotina modificada; mas sim quanto ao registro existente.
na linha 46 do seu exemplo (em cliente) o codigo está como TESTE, e a rotina "exige" um numero (deveria ser 45), altere manualmente ou elimine esse registro

 
Postado : 14/01/2013 11:09 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo, obrigado pela atenção cara, mas tá difícil terminar esse projeto, estão aparecendo mais problemas:

1) Quando salvo as informações preenchida no frmCadastroStudent esta demorando para salvar e esta mostrando os passos de execução do código, percebi isso após ter colocado o código do filtro Plan7(Dados), para amenizar acrescentei no código bt cmbSalvar() Application.ScreenUpdating = False e depois no fim Application.ScreenUpdating = True, mas a lentidão ainda continua;

2) Quando chamo frmCadCliente esta dando um erro, Erro em tempo de execução '13: Tipos incompatíveis - Fim Depurar , O erro esta localizado no código em destaque em vermelho:
Private Sub UserForm_Activate()
lsDesabilitar1
lsLocalizaRegistroStudent1 (Worksheets("Clientes").Cells(2, 1).Value)
Sheets("Menu no Excel").Activate
End Sub

3) Continua o erro do bt cmbUltimo ainda continua com erro;
4) Quando salvo as informações do frmCadCliente, o nome da empresa que teria que ser na célula B$ esta aparecendo na célula A$, por isso que a descrição TESTE estava no lugar do registro 45.

Cara desculpa pela minha ignorância, mas são este erros e acertos que estou aprendendo vba excel, se puder pode me ajudar mais uma vez.

Desde já agradeço.

silva_jmp

 
Postado : 14/01/2013 2:34 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Silva_imp
1) Não sei dizer qto a seu equipamento, porem no meu salva em ca. 20 segundos, não é muito mas pode ser melhorado.
Um dos vilões de tempo é a validação de dados; é o maior creio ser a rotina que está na sheet "DADOS" para o filtro.
O que ocorre:
a):O Formulario, independente de have alteração em um campo ou todos (ou mesmo nenhum) ao pressionar o botão salvar executa:
Rotina lfValidarDados, essa rotina "percorre" os campos do Form e compara com a planilha Validação (se não me engano 15 vezes); em seguita comeca a comparar os campos do frmCadCliente, que apesar de não ser objeto desse salvamento; abre o form faz a comparação e o descarta (se não der erro)
Melhoria:
Experimente separar a validação do frmCadCliente em outra sub rotina, e chame cada uma em seu respectivo form.
b):Então é iniciado o "salvamento" propriamente dito pela rotina lsAlterarStudent, então são 18 "campos" que são reinseridos na planilha "Dados", até ai tudo bem, porem com a rotina Private Sub Worksheet_Change, cada um dos dezoito campos aciona essa rotina.
Melhoria:
Retire essa rotina da folha de projetos da planilha, transferindo-a para um modulo, e a excute somente qdo for utiliza-la.
2)É o mesmo erro que eu falei anteriormente, o primeiro registro do frmCadCliente o campo Código esta como "Cocamar" porem dever ser 1.
3)Não é a rotina que está com erro mas sim o ultimo registro no campo UF, esta como "Campinas" e não existe esse codigo UF, então ao tentar carregar as cidades dessa UF é gerado o erro.
4)Não sei se foi os acertos acima, ou os acertos iniciais que não mencionei (ao abrir oprojeto vba, vá em depurar e Compilar, serão apresentado alguns erros que devem ser corrigidos), mas salvou normal
Experimente

 
Postado : 14/01/2013 4:37 pm
Página 1 / 2