iMasters Fóruns: Iniciante VBA - iMasters Fóruns

Ir para

Página 1 de 1
  • Novo tópico
  • Responder

Iniciante VBA Problema com código VBA

#1 Membro offline   Kika_Epilética Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 18
  • Cadastrado: 07-maio 08

Postou 05 fevereiro 2009 - 09:45

Bom dia galera do iMaster !! :thumbsup:

Sou novata em VBA e estou com a seguinte dificuldade.
Tenho o código de um formulário e o mesmo exibe o seguinte erro :
"Erro em tempo de execução '94' Uso de 'Null' inválido".
Já sei pq dá esse erro, só não sei como consertar =P

É um formulário para cadastro de celular de um funcionário.

O formulário possui os seguintes campo :

Linha (ComboBox)
Tipo Aparelho (Text Field)
Aparelho (Text Field)
Chip (Text Field)
Data Entrada (Text Field)
Matrícula (ComboBox)
Excepcionalidade (Text Field)
Viagem Internacional (Text Field)
Observação (Text Field)

Botão Inserir
Botão para retornar ao menu principal.

Sendo que ao lado do botão para retornar, tem 2 caixas de texto que aparecem no modo estrutura e não aparecem qndo se clica
para abrir, normalmente, o formulário (Possuem o nome de Texto41 e Texto43). Alguém pode me dizer o q é isso ?

O problema é o seguinte : Se eu clico, ou no text field, Combobox, botão para voltar ou no botão inserir sem que
o campo linha esteja "marcado" dá esse erro. O que pode ser ?

O código do programa é esse abaixo :

Option Compare Database

Private Sub Comando44_Click()
DoCmd.SetWarnings False
DoCmd.OpenQuery "indisponibiliza linha alocação"
DoCmd.OpenQuery "indisponibiliza chip alocação"
DoCmd.OpenQuery "indisponibiliza aparelho alocação"
DoCmd.SetWarnings True
If (Me.Número_Série_Aparelho.Value <> Me.Texto41.Value) Or Nz(Me.Texto41) = "" Then
	DoCmd.OpenQuery "Atualiza Linha"
End If
If Me.Número_Chip <> Me.Texto43 Or Nz(Me.Texto43) = "" Then
	DoCmd.OpenQuery "Atualiza Linha"
End If
On Error GoTo Err_Comando19_Click
DoCmd.Close acForm, "aloca linha funcionario"
Exit_Comando19_Click:
	Exit Sub
Err_Comando19_Click:
	MsgBox Err.Description
	Resume Exit_Comando19_Click
End Sub

Private Sub NumLinha_Exit(Cancel As Integer)
'If Me.NumLinha = Null Then
 '   DoCmd.CancelEvent
'End If
Me.Número_Série_Aparelho = Me.Texto41
Me.Número_Chip = Me.Texto43
Dim Marca, Modelo As String
Dim Tipo As String
'Me.Obs_termo = DLookup("[Descricao]", "[modelo]", "[nome_modelo] = '" + Modelo + "' And [marca_modelo] = '" + Marca + "'")
Tipo = DLookup("[Tipo_Linha]", "[Linha]", "[Número Linha] = '" + Me.NumLinha + "'")
Me.Tipo_Aparelho = DLookup("[Descricao]", "[Tipo_Linha]", "[Codigo] = '" + Tipo + "'")
Marca = DLookup("[Marca]", "[Aparelhos]", "[NumSerie] = '" + Me.Número_Série_Aparelho + "'")
Modelo = DLookup("[Modelo]", "[Aparelhos]", "[NumSerie] = '" + Me.Número_Série_Aparelho + "'")
Me.Obs_termo = DLookup("[Descricao]", "[modelo]", "[nome_modelo] = '" + Modelo + "' And [marca_modelo] = '" + Marca + "'")
End Sub

Private Sub Tem_excepcionalidade_AfterUpdate()
	If Me.Tem_excepcionalidade = -1 Then
		Me.Excepcionalidade.Locked = False
	End If
End Sub

Private Sub Comando45_Click()
On Error GoTo Err_Comando45_Click
	DoCmd.Close
Exit_Comando45_Click:
	Exit Sub
Err_Comando45_Click:
	MsgBox Err.Description
	Resume Exit_Comando45_Click
End Sub



Pelo o que eu vi no código, acho que tá errado o Comando19 no lugar do Comando44. Tinha feito a alteração,
mas coloquei assim só para que fosse analisado melhor.

Qualquer opinião será bem vinda ^^ :joia:
Abraços :P

#2 Membro offline   Daniel LM Costa Ícone

  • dcspy
  • Ícone
  • Grupo: Membros
  • Posts: 32
  • Cadastrado: 21-janeiro 09
  • Sexo:Masculino

Postou 06 fevereiro 2009 - 12:06

Ver postKika_Epilética, em 05/02/2009 - 10:45, disse:

Bom dia galera do iMaster !! :thumbsup:

Sou novata em VBA e estou com a seguinte dificuldade.
Tenho o código de um formulário e o mesmo exibe o seguinte erro :
"Erro em tempo de execução '94' Uso de 'Null' inválido".
Já sei pq dá esse erro, só não sei como consertar =P

É um formulário para cadastro de celular de um funcionário.

O formulário possui os seguintes campo :

Linha (ComboBox)
Tipo Aparelho (Text Field)
Aparelho (Text Field)
Chip (Text Field)
Data Entrada (Text Field)
Matrícula (ComboBox)
Excepcionalidade (Text Field)
Viagem Internacional (Text Field)
Observação (Text Field)

Botão Inserir
Botão para retornar ao menu principal.

Sendo que ao lado do botão para retornar, tem 2 caixas de texto que aparecem no modo estrutura e não aparecem qndo se clica
para abrir, normalmente, o formulário (Possuem o nome de Texto41 e Texto43). Alguém pode me dizer o q é isso ?

O problema é o seguinte : Se eu clico, ou no text field, Combobox, botão para voltar ou no botão inserir sem que
o campo linha esteja "marcado" dá esse erro. O que pode ser ?

O código do programa é esse abaixo :

Option Compare Database
  
  Private Sub Comando44_Click()
  DoCmd.SetWarnings False
  DoCmd.OpenQuery "indisponibiliza linha alocação"
  DoCmd.OpenQuery "indisponibiliza chip alocação"
  DoCmd.OpenQuery "indisponibiliza aparelho alocação"
  DoCmd.SetWarnings True
  If (Me.Número_Série_Aparelho.Value <> Me.Texto41.Value) Or Nz(Me.Texto41) = "" Then
	  DoCmd.OpenQuery "Atualiza Linha"
  End If
  If Me.Número_Chip <> Me.Texto43 Or Nz(Me.Texto43) = "" Then
	  DoCmd.OpenQuery "Atualiza Linha"
  End If
  On Error GoTo Err_Comando19_Click
  DoCmd.Close acForm, "aloca linha funcionario"
  Exit_Comando19_Click:
	  Exit Sub
  Err_Comando19_Click:
	  MsgBox Err.Description
	  Resume Exit_Comando19_Click
  End Sub
  
  Private Sub NumLinha_Exit(Cancel As Integer)
  'If Me.NumLinha = Null Then
   '   DoCmd.CancelEvent
  'End If
  Me.Número_Série_Aparelho = Me.Texto41
  Me.Número_Chip = Me.Texto43
  Dim Marca, Modelo As String
  Dim Tipo As String
  'Me.Obs_termo = DLookup("[Descricao]", "[modelo]", "[nome_modelo] = '" + Modelo + "' And [marca_modelo] = '" + Marca + "'")
  Tipo = DLookup("[Tipo_Linha]", "[Linha]", "[Número Linha] = '" + Me.NumLinha + "'")
  Me.Tipo_Aparelho = DLookup("[Descricao]", "[Tipo_Linha]", "[Codigo] = '" + Tipo + "'")
  Marca = DLookup("[Marca]", "[Aparelhos]", "[NumSerie] = '" + Me.Número_Série_Aparelho + "'")
  Modelo = DLookup("[Modelo]", "[Aparelhos]", "[NumSerie] = '" + Me.Número_Série_Aparelho + "'")
  Me.Obs_termo = DLookup("[Descricao]", "[modelo]", "[nome_modelo] = '" + Modelo + "' And [marca_modelo] = '" + Marca + "'")
  End Sub
  
  Private Sub Tem_excepcionalidade_AfterUpdate()
	  If Me.Tem_excepcionalidade = -1 Then
		  Me.Excepcionalidade.Locked = False
	  End If
  End Sub
  
  Private Sub Comando45_Click()
  On Error GoTo Err_Comando45_Click
	  DoCmd.Close
  Exit_Comando45_Click:
	  Exit Sub
  Err_Comando45_Click:
	  MsgBox Err.Description
	  Resume Exit_Comando45_Click
  End Sub



Pelo o que eu vi no código, acho que tá errado o Comando19 no lugar do Comando44. Tinha feito a alteração,
mas coloquei assim só para que fosse analisado melhor.

Qualquer opinião será bem vinda ^^ :joia:
Abraços :P


Nº - O problema com o nulo pode ser revolvido usando a função NZ (campo,[valor se o campo for nulo])

não consegui distinguir em campo ocorreu o problema mas provavelmente o erro foi em um campo usado para o lookup

use assim

Nz(DLookup("[Marca]", "[Aparelhos]", "[NumSerie] = '" + nz(Me.Número_Série_Aparelho ,valorQualquer)+ "'")

Dá uma olhada também na linha

Me.Número_Série_Aparelho = Me.Texto41
Me.Número_Chip = Me.Texto43

Você disse que esses controle não aperecem eles podem estar sendo atualizados pela linha


DoCmd.OpenQuery "Atualiza Linha"

Página 1 de 1
  • Novo tópico
  • Responder

1 usuário(s) está(ão) lendo este tópico
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)