Página 1 de 1

Formulário de lançamento de faltas, tempo de execução 1004

Enviado: 19 Abr 2018 às 15:42
por Gerald0
Pessoal, sou meio novo no VBA e empaquei nesse erro. O objetivo da aplicação é conter Dados de estagiários (como nome e data de admissão) em uma planilha, e um botão "cadastrar falta" nessa planilha, que alimenta outra planilha com as faltas através de um formulário. Eis o código

Private Sub CommandButton_gravar_Click()
ThisWorkbook.Sheets("Faltas").Range("A1").Select
' se A2 em faltas for diferente de nada, então fim do select e ctrl+down'
If ThisWorkbook.Sheets("Faltas").Range("A2").Value <> "" Then
Selection.End(xlDown).Select
End If
ActiveCell.Offset(1, 0).Select
Selection.Value = ThisWorkbook.Sheets("Planilha1").Range("A2")
ActiveCell.Offset(0, 1).Select
Selection.Value = TextBox_falta
ActiveCell.Offset(0, 1).Select
Selection.Value = TextBox_Processo
ThisWorkbook.RefreshAll
Unload Form_Falta
End Sub

Ele funciona no VBA, mas não funciona no botão, dá o erro tempo de execução 1004, ajuda please!
PS: alguma dica de como lançar mais de uma falta por vez?

Re: Formulário de lançamento de faltas, tempo de execução 10

Enviado: 19 Abr 2018 às 16:28
por osvaldomp
Gerald0 escreveu: ThisWorkbook.Sheets("Faltas").Range("A1").Select
O erro ocorre ao tentar selecionar uma célula que não é da planilha ativa. Ative primeiro a planilha e depois a célula, assim:
Sheets("Faltas").Activate
Range("A1").Select


No entanto é recomendável não utilizar Activate e ou Select.

PS: alguma dica de como lançar mais de uma falta por vez?
Exclua do seu código o comando que fecha o Form, preencha-o novamente e clique no botão Gravar ~~~> Unload Form_Falta


Experimente este código:
Código: Selecionar todos
Private Sub CommandButton_gravar_Click()
 With Sheets("Faltas").Cells(Rows.Count, 1)
  .End(3)(2) = Range("A2").Value
  .End(3)(1, 2) = TextBox_falta.Value
  .End(3)(1, 3) = TextBox_Processo.Value
 End With
 Unload Form_Falta
End Sub

Formulário de lançamento de faltas, tempo de execução 1004

Enviado: 20 Abr 2018 às 11:20
por Gerald0
Valeu mesmo Osvaldomp, funcionou aqui. Mas não entendi essa parte:



No entanto é recomendável não utilizar Activate e ou Select.

PS: alguma dica de como lançar mais de uma falta por vez?
Exclua do seu código o comando que fecha o Form, preencha-o novamente e clique no botão Gravar ~~~> Unload Form_Falta

e nem o segundo código, ele não gravou falta nem mostrou erro, poderia comentar ele?

Re: Formulário de lançamento de faltas, tempo de execução 10

Enviado: 20 Abr 2018 às 13:38
por osvaldomp
Os comandos Activate e Select raramente são necessários em códigos escritos. Eles são basicamente utilizados em macros gravadas (lembrando que o gravador de macros não raciocina, não planeja, apenas se limita a escrever as ações efetuadas pelo usuário) e esses comandos também são utilizados por usuários com conhecimentos limitados dos recursos da linguagem VBA.
Como pontos negativos o uso desses comandos prolonga o tempo de execução do código, limita a flexibilidade do código, frequentemente exige a inserção de comandos adicionais no código e ainda provocam movimentação na tela.
Como você já declarou antes que está iniciando em macros ("Pessoal, sou meio novo no VBA") eu sugiro que desde já você escreva seus códigos sem utilizar tais comandos.

Gerald0 escreveu: PS: alguma dica de como lançar mais de uma falta por vez?
Exclua do seu código o comando que fecha o Form, preencha-o novamente e clique no botão Gravar ~~~> Unload Form_Falta
e nem o segundo código, ele não gravou falta nem mostrou erro, poderia comentar ele?
Sobre esta parte, o que eu entendi como "lançar mais de uma falta por vez" foi:
1. abre o Form / insere data e processo / clica em Gravar (mantém o Form na tela)
2. insere nova data e novo processo (se o caso) / clica em Gravar (mantém o Form na tela)
3. repete o item 2 acima quantas vezes desejar / por último clica em Cancelar para fechar o Form
Para viabilizar a sequência acima basta excluir o comando Unload Form_Falta
Se não for isso, explique.