none
atualizar userform RRS feed

  • Pergunta

  • boa noite

    No codigo abaixo inclui a rotina em negrito para atualizar os dados na palnilha, porem, atualização so acontece quando fechar o formulario e abrir novamente.

    Pergunto:

    tem algum codigo que atualize automaticamente a planilha ao sair do formulario?

    Private Sub UserForm_Activate() C = Format(Date, "mm"): LI = Format(Date, "dd") C = CStr(C) * 1 + 8: LI = CStr(LI) * 1 + 1 Y = Sheets("Apoio").Cells(LI, C) For X = 1 To Y Controls("OptionButton" & X).Enabled = True Controls("OptionButton" & X).Font.Bold = True Controls("OptionButton" & X).BackColor = &HC0FFFF Next X fncGetLeitos 1, 3 fncGetLeitos 4, 6 fncGetLeitos 7, 9 fncGetLeitos 10, 12 fncGetLeitos 19, 21 fncGetLeitos 22, 24 fncGetLeitos 25, 26 fncGetLeitos 27, 28 fncGetLeitos 29, 30 fncGetLeitos 31, 32 fncGetLeitos 33, 34 fncGetLeitos 35, 36 fncGetLeitos 37, 38 fncGetLeitos 39, 40 For X = 1 To Y If Sheets("Apoio").Cells(X + 1, 5) = "Pac" Or Sheets("Apoio").Cells(X + 1, 5) = "Bloc" Then Controls("OptionButton" & X).Enabled = False Controls("OptionButton" & X).Font.Bold = False Controls("OptionButton" & X).BackColor = &HE0E0E0 End If Next X For X = 1 To Y If Controls("OptionButton" & X).Caption = "Leito " & X & " - M" And Controls("OptionButton" & X).Enabled = True Then LMV = LMV + 1 End If Next X Plan3.Unprotect Password:="123" Sheets("Apoio").Cells(42, 8) = LMV Plan3.Protect Password:="123" For X = 1 To Y If Controls("OptionButton" & X).Caption = "Leito " & X & " - F" And Controls("OptionButton" & X).Enabled = True Then LFV = LFV + 1 End If Next X Plan3.Unprotect Password:="123" Sheets("Apoio").Cells(42, 13) = LFV Plan3.Protect Password:="123"

    End Sub Private Sub fncGetLeitos(lngMin As Long, lngMax As Long) Dim lngZ As Long Dim lngX As Long For lngZ = lngMin To lngMax If Sheets("Apoio").Cells(lngZ + 1, 6) = "M" Then For lngX = lngMin To lngMax Controls("OptionButton" & lngX).Enabled = True Controls("OptionButton" & lngX).Font.Bold = True Controls("OptionButton" & lngX).BackColor = &HFFFF80 Controls("OptionButton" & lngX).Caption = "Leito " & lngX & " - M" Next lngX Exit For End If If Sheets("Apoio").Cells(lngZ + 1, 6) = "F" Then For lngX = lngMin To lngMax Controls("OptionButton" & lngX).Enabled = True Controls("OptionButton" & lngX).Font.Bold = True Controls("OptionButton" & lngX).BackColor = &HC0C0FF Controls("OptionButton" & lngX).Caption = "Leito " & lngX & " - F" Next lngX Exit For End If Next lngZ End Sub

    Obrigado
    • Editado JLNunes domingo, 16 de fevereiro de 2014 01:02
    domingo, 16 de fevereiro de 2014 01:00

Respostas

  • O "problema" é que está mandando atualizar na hora de abrir o formulário, então basta fazer o seguinte, vá até a última linha do código vba dentro do formulário( depois do End Sub final) e cole isto:

    Private Sub UserForm_Terminate()
        Application.ScreenUpdating = True
    End Sub
    
    

    salve e teste!

    segunda-feira, 17 de fevereiro de 2014 19:17

Todas as Respostas

  • Nunes,

    Voce tem que utilizar o evento do botao fechar para executar sua rotina.

    Segue exemplo

    Sub Encerrar()       

    ActiveWorkbook.Save      

    ActiveWorkbook.close     'essa linha de código fecha somente o wkb ativo       

    Application.Quit              'fecha o aplicativo todos os livros abertos.

    End Sub



    Este comando também fecha e salva

    ThisWorkbook.Application.Quit

    Boa sorte,

    AT_+

    domingo, 16 de fevereiro de 2014 14:27
  • Boa tarde JLNunes.

    Não sei se no seu caso resolve, mas eu utilizo apenas atualização de tela para isso. Basta incluir após sua rotina:

    Application.ScreenUpdating = True

    Resolve?

    Abraço.


    Filipe Magno

    domingo, 16 de fevereiro de 2014 18:07
  • boa tarde

    no exemplo acima é uma parte do codigo, no qual ao ativar o formulario ele atualiza, porem, ao modificar dados no formulario, ele so atualiza os dados na planilha quando ativo o formulario novamente. Na verdade gostaria que atualização fosse quando fechar o formulario, mais isso nao acontece e os evento citado polo Filipe e Alexandre na atende a necessidade.

    obrigado

    domingo, 16 de fevereiro de 2014 18:53
  • Se entendi bem o que vc quer, o problema é que vc quer que o formulário envie os dados para a planilha, mas isso só ocorre ao abrir o formulário, uma vez que vc colocou o código dentro do evento "UserForm_Activate()".

    Obviamente esse é o comportamento esperado, já que a execução somente ocorre ao abrir o formulário. Existem muitas formas de contornar isso e talvez a mais fácil e passar o procedimento de atualização para um módulo e "chamá-lo" sempre que quiser que atualize a planilha. Você inclusive pode manter a atualização ao abrir o formulário, mas assim também poderá disparar a atualização quando quiser, ou simplesmente ao fechar o formulário.

    Seria isso?


    Filipe Magno

    domingo, 16 de fevereiro de 2014 20:06
  • boa noite

    É mais ou menos isso Felipe, alguma coisa que atualizasse ao digitar novo dados no formulario.

    domingo, 16 de fevereiro de 2014 21:47
  • Então ficou fácil:

    1. Recorte o código que atualiza a planilha e cole num módulo.
    2. Se quiser que continue executando ao abrir, chame essa função no evento "UserForm_Activate()", no mesmo ponto que vc recortou.
    3. Insira um botão no seu formulário para executar essa rotina sempre que desejar ou associe a algum evento, como atualização de Texbox, clique num Listbox, ou qualquer coisa desejada.

    Assim será sempre possível atualizar a planilha quando quiser.

    Compreendeu?


    Filipe Magno

    domingo, 16 de fevereiro de 2014 22:42
  • Felipe

    nao entendi quando voce diz:

    1. Recorte o código que atualiza a planilha e cole num módulo...

    refere-se ao codigo acima?

    porque o codigo que atualiza uma parte da planilha é exatamente o codigo acima, ao coloca-lo o codigo num modulo  gera mensagem de erro de compilação, sub ou function nao definida.

    segunda-feira, 17 de fevereiro de 2014 01:13
  • Olá.

    "1. Recorte o código que atualiza a planilha e cole num módulo..."

    Recorte apenas a parte que realiza a atualização que vc deseja. Se for o código inteiro não tem problema. Entretanto, como se refere a um formulário, vc terá que incluir o nome do formulário para se referenciar a ele. Ou seja, se precisa usar:

    Controls("OptionButton" & lngX).Enabled = True

    vai precisar substituir por:

    SeuFormulario.Controls("OptionButton" & lngX).Enabled = True

    Não custa dizer que o nome da função também precisará ser trocado.

    Ok?


    Filipe Magno

    segunda-feira, 17 de fevereiro de 2014 01:34
  • O "problema" é que está mandando atualizar na hora de abrir o formulário, então basta fazer o seguinte, vá até a última linha do código vba dentro do formulário( depois do End Sub final) e cole isto:

    Private Sub UserForm_Terminate()
        Application.ScreenUpdating = True
    End Sub
    
    

    salve e teste!

    segunda-feira, 17 de fevereiro de 2014 19:17