MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    Rodar vba apenas no que está filtrado

    Compartilhe

    gustavovon
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 67
    Registrado : 07/10/2012

    Rodar vba apenas no que está filtrado

    Mensagem  gustavovon em Ter 16 Jun 2015, 16:30

    Galera, estou precisando de um ajuda para rodar um codigo apenas do q esta filtrado. Tentei fazer algumas modificacoes no codigo original mas nao estou conseguindo, segue abaixo o original feito pelo colega Alexandre Neves do forum:

    Sub ActualizaPrazos()
    'criada por Alexandre Neves [Você precisa estar registrado e conectado para ver este link.]
    'em 2012-10-27
    'para gustavovon
    'do fórum MaximoAccess
    Dim Rst As DAO.Recordset
    Set Rst = CurrentDb.OpenRecordset("Table1")
    Do While Not Rst.EOF
    Rst.Edit
    Select Case Rst("Status")
    Case "Aguard. PRAZO RECURSAL"
    If DateDiff("d", Rst("Ultima Alteração"), Date) > 30 Then Rst("Prazo") = "Vencido"
    Case "AGUARD. PRAZO ESPECIAL"
    If DateDiff("d", Rst("Ultima Alteração"), Date) > 15 Then Rst("Prazo") = "Vencido"
    Case "EM PROC. DE INSCRIÇÃO EM D.A."
    If DateDiff("d", Rst("Ultima Alteração"), Date) > 45 Then Rst("Prazo") = "Vencido"
    Case "AGUARD. PRAZO AJUR"
    If DateDiff("d", Rst("Ultima Alteração"), Date) > 120 Then Rst("Prazo") = "Vencido"
    Case Else
    If IsNull(Rst("Ultima Alteração")) Then
    Rst("Prazo") = "S/ PRAZO"
    ElseIf IsDate(Rst("Ultima Alteração")) Then
    If DateDiff("d", Rst("Ultima Alteração"), Date) > 360 Then
    Rst("Prazo") = "360 dias"
    ElseIf DateDiff("d", Rst("Ultima Alteração"), Date) > 330 Then
    Rst("Prazo") = "330 dias"
    ElseIf DateDiff("d", Rst("Ultima Alteração"), Date) > 300 Then
    Rst("Prazo") = "300 dias"
    ElseIf DateDiff("d", Rst("Ultima Alteração"), Date) > 270 Then
    Rst("Prazo") = "270 dias"
    ElseIf DateDiff("d", Rst("Ultima Alteração"), Date) > 240 Then
    Rst("Prazo") = "240 dias"
    ElseIf DateDiff("d", Rst("Ultima Alteração"), Date) > 210 Then
    Rst("Prazo") = "210 dias"
    ElseIf DateDiff("d", Rst("Ultima Alteração"), Date) > 180 Then
    Rst("Prazo") = "180 dias"
    ElseIf DateDiff("d", Rst("Ultima Alteração"), Date) > 150 Then
    Rst("Prazo") = "150 dias"
    ElseIf DateDiff("d", Rst("Ultima Alteração"), Date) > 120 Then
    Rst("Prazo") = "120 dias"
    ElseIf DateDiff("d", Rst("Ultima Alteração"), Date) > 90 Then
    Rst("Prazo") = "90 dias"
    ElseIf DateDiff("d", Rst("Ultima Alteração"), Date) > 60 Then
    Rst("Prazo") = "60 dias"
    ElseIf DateDiff("d", Rst("Ultima Alteração"), Date) > 45 Then
    Rst("Prazo") = "45 dias"
    ElseIf DateDiff("d", Rst("Ultima Alteração"), Date) > 30 Then
    Rst("Prazo") = "30 dias"
    ElseIf DateDiff("d", Rst("Ultima Alteração"), Date) > 15 Then
    Rst("Prazo") = "15 dias"
    End If
    End If
    End Select
    Rst.Update
    Rst.MoveNext
    Loop
    Set Rst = Nothing
    End Sub

    Oque preciso é que esse codigo rode apenas no q foi filtrado em um subformulario, Nz(Me!sfrmPedidos.Form.Filter, "") mas nao estou conseguindo fazer essa adaptacao funcionar e gravar minha tabela (table1). Alguem poderia dar uma luz ?

    Abs

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: Rodar vba apenas no que está filtrado

    Mensagem  Alexandre Neves em Ter 16 Jun 2015, 17:48

    Boa tarde,
    A origem dos dados está na tabela "Table1". Coloque o filtro para o que pretende
    Set Rst = CurrentDb.OpenRecordset("Table1")


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    gustavovon
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 67
    Registrado : 07/10/2012

    Re: Rodar vba apenas no que está filtrado

    Mensagem  gustavovon em Ter 16 Jun 2015, 20:39

    Fala Alexandre !! Vou agraceder mais um vez por sua ajuda. Esse codigo me ajudou bastante !

    Entao, eu tinha feito essa modificação q vc falou:
    Set Rst = CurrentDb.OpenRecordset(Me!sfrmPedidos.Form.Filter, "")
    O filtro é feito nesse subform, preciso q apenas os dados q estao filtrados por ele sejam alterados na "table1"

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: Rodar vba apenas no que está filtrado

    Mensagem  Alexandre Neves em Qua 17 Jun 2015, 09:41

    Bom dia,
    Tem de colocar, na origem do rercordset, a origem dos registos do subform


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    gustavovon
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 67
    Registrado : 07/10/2012

    Re: Rodar vba apenas no que está filtrado

    Mensagem  gustavovon em Qua 17 Jun 2015, 13:08

    Alexandre, tentei varias opcoes mas nao funciona de jeito nenhum.

    Set rst = CurrentDb.OpenRecordset("Table1", Forms!Frmadministrador.Me!frmpedidos.Form.Filter, "")

    A origem dos dados do subform é o frmadministrador. Coloquei apontando direto pra ele mas tb nao funcionou. Se puder continuar me orientando, te agradeço.

    Abs

    gustavovon
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 67
    Registrado : 07/10/2012

    Re: Rodar vba apenas no que está filtrado

    Mensagem  gustavovon em Qua 17 Jun 2015, 17:31

    Estou tentando tb deixar a funcao do jeito q esta e tentar mandar o conteudo ja filtrado atraves do botao q esta dentro do form. mas tb nao funcionou ...

    Private Sub Comando270_Click()
    Call ActualizaPrazos ("sfrmpedidos", Nz(Me!sfrmPedidos.Form.Filter, ""))
    End Sub

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: Rodar vba apenas no que está filtrado

    Mensagem  Alexandre Neves em Qui 18 Jun 2015, 10:07

    Bom dia,
    A origem dos dados tem de ser uma tabela ou consulta. Veja na origem dos dados do formulário


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    gustavovon
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 67
    Registrado : 07/10/2012

    Re: Rodar vba apenas no que está filtrado

    Mensagem  gustavovon em Qui 18 Jun 2015, 13:43

    Alexandre, ta dificil ... Laughing

    Tenho tentado tanto no botao do form ( para enviar filtrado) como direto pelo vba. Qual seria o correto ? Pelo botao do form, nao preciso fazer referencia a ele, apenas cito o subform. Estou achando que a funcao nao identificar o filtro usado no subform. A ultima q tentei foi essa:

    Set rst = CurrentDb.OpenRecordset("table1", Nz(Form!frmadministrador.Me!sfrmPedidos.Form.Filter, ""))

    Nela eu faço referencia a minha origem (table1) e cito o filtro do subform (adicionando que o subform esta no form "frmadministrador")


    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: Rodar vba apenas no que está filtrado

    Mensagem  Alexandre Neves em Qui 18 Jun 2015, 15:17

    O filtro não é isso. O filtro será "campo condição valor"


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

      Data/hora atual: Qua 07 Dez 2016, 20:13