Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas Condições Em Macro E Grupo De Opções.


Venom Fireman

Pergunta

Olá!

Boa noite!

Pessoal, acontece da seguinte maneira, eu criei uma macro que abre vários formulários de consulta e cada chamada de um formulário ganhou um nome dentro da macro.

O formulário a ser aberto seria definido por um botão de opção em um outro formulário.

Como tenho 10 consultas coloquei 10 botões de opção sendo que a eles estão atribuidos valores seqüenciais de 1 a 10.

Na minha macro tenho uma condição para cada nome dentro dela que chamaria o formulário específico caso o valor do botão fosse o correspondente.

Na macro coloquei a condição assim:

nome macro Condição Ação

abre_area [Formulários]![abertura_formu]![consultas_op]=1 AbrirFormulário(x)

abre_bairro [Formulários]![abertura_formu]![consultas_op]=2 AbrirFormulário(y)

...

abre_rua [Formulários]![abertura_formu]![consultas_op]=10 AbrirFormulário(z)

E assim por diante para cada valor de botões, onde [consultas_op] é o grupo de botões de opção que receberá o valor do botão selecionado.

Para cada valor deveria executar a ação nomeada dentro da macro que tem todas elas.

O problema está aí, se eu escolher o primeiro botão ([Formulários]![abertura_formu]![consultas_op]=1) ele funciona e abre a consulta, mas para os demais ele não executa, como se os valores não estivessem sendo atribuidos ao grupo de botões de opção ou como se a macro não estivesse avaliando as condições depois de avaliada a primeira...

Sei que o tópico está grande, mas alguém sabe me orientar nesse problema enorme que estou tendo?

Muito obrigado pela paciência desde já!

Até mais!

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0
Olá!

Boa noite!

Pessoal, acontece da seguinte maneira, eu criei uma macro que abre vários formulários de consulta e cada chamada de um formulário ganhou um nome dentro da macro.

O formulário a ser aberto seria definido por um botão de opção em um outro formulário.

Como tenho 10 consultas coloquei 10 botões de opção sendo que a eles estão atribuidos valores seqüenciais de 1 a 10.

Na minha macro tenho uma condição para cada nome dentro dela que chamaria o formulário específico caso o valor do botão fosse o correspondente.

Na macro coloquei a condição assim:

nome macro Condição Ação

abre_area [Formulários]![abertura_formu]![consultas_op]=1 AbrirFormulário(x)

abre_bairro [Formulários]![abertura_formu]![consultas_op]=2 AbrirFormulário(y)

...

abre_rua [Formulários]![abertura_formu]![consultas_op]=10 AbrirFormulário(z)

E assim por diante para cada valor de botões, onde [consultas_op] é o grupo de botões de opção que receberá o valor do botão selecionado.

Para cada valor deveria executar a ação nomeada dentro da macro que tem todas elas.

O problema está aí, se eu escolher o primeiro botão ([Formulários]![abertura_formu]![consultas_op]=1) ele funciona e abre a consulta, mas para os demais ele não executa, como se os valores não estivessem sendo atribuidos ao grupo de botões de opção ou como se a macro não estivesse avaliando as condições depois de avaliada a primeira...

Sei que o tópico está grande, mas alguém sabe me orientar nesse problema enorme que estou tendo?

Muito obrigado pela paciência desde já!

Até mais!

Venom, não quer fazer isso em VBA?

o primeiro problema que posso acreditar estar acontecendo é na definição do valor do grupo de opções...

aconselho que você verifique os valores inicialmente para depois procurar problemas nas condicionais...

Em VBA é bem mais simples e garantido a eficiência:

no Evento Ao clicar do seu Botão de opção, coloque a seguinte programação:

DoCmd.OpenForm "NomeDoSeuFormulário", acNormal

nesta mesma linha de programação, a função OpenForm permite você escolher o modo de abertura do formulário, o modo de janela que o mesmo vai aparecer, um filtro que você deseje aplicar...enfim...

é bem interessante...

retorne os resultados e dúvidas, ok?

abraços,

Link para o comentário
Compartilhar em outros sites

  • 0
Venom, não quer fazer isso em VBA?

o primeiro problema que posso acreditar estar acontecendo é na definição do valor do grupo de opções...

aconselho que você verifique os valores inicialmente para depois procurar problemas nas condicionais...

Em VBA é bem mais simples e garantido a eficiência:

no Evento Ao clicar do seu Botão de opção, coloque a seguinte programação:

DoCmd.OpenForm "NomeDoSeuFormulário", acNormal

nesta mesma linha de programação, a função OpenForm permite você escolher o modo de abertura do formulário, o modo de janela que o mesmo vai aparecer, um filtro que você deseje aplicar...enfim...

é bem interessante...

retorne os resultados e dúvidas, ok?

Olá Elber!

Boa tarde e desde já obrigado pela atenção...

Primeiro vou rever, como você me orientou, os valores e depois as condições.

Quanto ao VBA eu suponho sim que seja mais estável do que as macros e suas condições, só que eu não sei usar o VBA cru, ainda mais porque eu usar um único botão para abrir as 10 consultas separadamente, cada vez que eu apertar o botão ele tem que avaliar qual opção foi marcada e executar a abertura do formulário correspondente à consulta.

Ou seja, se usar o VBA já me é complicado, imagina ter que usá-lo com condições IF e avaliando o valor do grupo de opções? rs...

Se você puder me ajudar a fazer isso eu parto para o VBA sem problemas..

Vlw...

Link para o comentário
Compartilhar em outros sites

  • 0
Venom, não quer fazer isso em VBA?

o primeiro problema que posso acreditar estar acontecendo é na definição do valor do grupo de opções...

aconselho que você verifique os valores inicialmente para depois procurar problemas nas condicionais...

Em VBA é bem mais simples e garantido a eficiência:

no Evento Ao clicar do seu Botão de opção, coloque a seguinte programação:

DoCmd.OpenForm "NomeDoSeuFormulário", acNormal

nesta mesma linha de programação, a função OpenForm permite você escolher o modo de abertura do formulário, o modo de janela que o mesmo vai aparecer, um filtro que você deseje aplicar...enfim...

é bem interessante...

retorne os resultados e dúvidas, ok?

Mais uma vez aqui estou Elber!

Bem, consegui resolver o meu problema um pouco com o que você propôs, claro que não com VBA puro e um pouco com macro...

Tentei com VBA puro, chamando o nome dos formulários onde agora ele chama as macros, ele chamava, mas assim que eu digitava algo na caixa de mensagem onde se deve digitar o critério ele dizia que era um argumento inválido ou o tipo de dados solicitado não era compatível com o campo, então fiz algumas alterações no código, usei uma parte do código que o próprio Access escreveu, o que você sugeriu e mais as macros nomeadas e acabou dando certo...

Segue abaixo o código para que você veja e entenda o que eu fiz, ok?

Desde já muito obrigado pela atenção e pela força!

Private Sub consultar_opc_Click()

Dim resulta As String
resulta = consultas_op.Value
' A variável resulta armazena o valor definido para o grupo de opções
 '   consultas_op de modo que esse valor possa ser avaliado pelo
 ' operador lógico If.
If resulta = "1" Then
' If avalia o valor e realiza a ação de executar a macro,
' o nome de cada macro deve estar entre aspas dupla e devem ser
' chamadas pelo nome com que foram salvas seguido do ponto e o nome da macro.
DoCmd.RunMacro "abrir.abre_area"
End If

If resulta = "2" Then
DoCmd.RunMacro "abrir.abre_bairro"
End If

If resulta = "3" Then
DoCmd.RunMacro "abrir.abre_eng"
End If

If resulta = "4" Then
DoCmd.RunMacro "abrir.abre_ocupa"
End If

If resulta = "5" Then
DoCmd.RunMacro "abrir.abre_proj_ant"
End If

If resulta = "6" Then
DoCmd.RunMacro "abrir.abre_proj_subs"
End If

If resulta = "7" Then
DoCmd.RunMacro "abrir.abre_projeto"
End If

If resulta = "8" Then
DoCmd.RunMacro "abrir.abre_proprietario"
End If

If resulta = "9" Then
DoCmd.RunMacro "abrir.abre_resp_uso"
End If

If resulta = "10" Then
DoCmd.RunMacro "abrir.abre_rua"
End If

On Error GoTo Err_consultar_opc_Click

'    Dim stDocName As String - Colocada como comentário

'   stDocName = "abrir" - Colocada como comentário
'  DoCmd.RunMacro stDocName - Colocada como comentário
' Todas para ver se o argumento funciona
' Usei essa parte do código que o próprio Access cria para moldar o meu.
Exit_consultar_opc_Click:
    Exit Sub

Err_consultar_opc_Click:
    MsgBox Err.Description
    Resume Exit_consultar_opc_Click
    
End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

estranho Venon...já que apenas tive por experiência essa mensagem de dados incompatíveis ou critérios inválidos quando digitei em um campo do formulário algum valor do tipo texto, por exemplo, quando o campo na tabela é pra ser do tipo número...

Entretanto, que ótimo que deu certo o seu problema...

a sua programação funcionaria sim sem macro (caso não houvesse esse problema que você está dizendo), já que no Docmd.RunMacro, onde você chama o nome da macro, você deveria inserir apenas o Docmd.OpenForm e indicar direto o nome do formulário...

quando você inseriu o docmd.openform, chegou a especificar o tipo de abertura dele???

não sei se enflue em algo, mas enfim, todos os testes são válidos, já que sempre usei docmd.openform e nunca encontrei problemas do tipo como o qual você encontrou...

em vez de digitar um If/EndIf para cada valor de opção, você poderia criar If/ElseIf/EndIf...como também poderia utilizar do SelectCase como o "hummm" opinou...

o ElseIf funciona da seguinte maneira:

If Condicional 1 Then

EXECUTA PARAMETROS DA CONDICIONAL 1

ElseIf Condicional 2 Then

EXECUTA PARAMETROS DA CONDICIONAL 2

ElseIf Condicional 3 Then

EXECUTA PARAMETROS DA CONDICIONAL 3

Else

EXECUTA PARAMETROS DO RESTO DE CONDICIONAIS

EndIf

SE a condicional 1 não for satisfeita, e a condicional 2 não for satisfeita, e a condicional "n" não for satisfeita, assim então executa os parâmetros do resto de condicionais ELSE...Porém, caso alguma das condicionais anteriores ao resto seja satisfeita, para o teste de condicional e vai para o EndIf....

deu pra entender? dessa forma, você engloba todas as condicionais num If só, e resume melhor as programações...

Abração, fique com Deus!

Link para o comentário
Compartilhar em outros sites

  • 0

o select case é assim: um exemplo dele:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
        Case vbKeyF1
            Msgbox "F1 foi apertada"
        Case vbKeyF2
            Msgbox "F2 foi apertada"
        Case vbKeyF3
            Msgbox "F3 foi apertada"
    End Select
End Sub

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...