Notifications
Clear all

Fechar e salvar Workbooks

3 Posts
2 Usuários
0 Reactions
964 Visualizações
(@luciano_cs)
Posts: 4
New Member
Topic starter
 

Olá pessoal, sou novo no fórum, estou desenvolvendo um sistema em vba e estou com a seguinte dificuldade, antes de iniciar o meu sistema eu gostaria de percorrer todos os workbooks abertos e perguntar ao usuário se deseja salvá-los, porém se o workbook aberto for a do meu sistema ele não o fecha, até aí tudo bem, se tiver apenas uma pasta de trabalho já aberta ele funciona, porém se tiver mais de uma ele não funciona, o que posso estar fazendo errado? obrigado.


Private Sub Workbook_Open()

'VERIFICANDO PASTAS DE TRABALHO ABERTAS

Dim NomeSistema, NumPastas

NomeSistema = ThisWorkbook.Name 'Pasta do meu sistema que deverá ficar aberta

NumPastas = Application.Workbooks.Count


If NumPastas > 1 Then 'se nenhuma pasta estiver aberta ele entra direto no sistema

    For i = 1 To Application.Workbooks.Count
       
        If Application.Workbooks(i).Name <> NomeSistema Then
               
            Resposta = MsgBox("Deseja salvar as alterações na Pasta: " & Application.Workbooks(i).Name, vbYesNo + vbExclamation, "VALEC-SUPRO")
               
            If Resposta = vbYes Then
                   
                Application.Workbooks(i).Activate
                        
                ActiveWorkbook.Close SaveChanges:=True
                       
                Else
                
                Application.Workbooks(i).Activate
                        
                ActiveWorkbook.Close SaveChanges:=True
               
            End If
            
        End If
                    
        If Application.Workbooks.Count = 1 Then Exit For
                   
    Next

End If


ThisWorkbook.Application.Visible = True

Form_login.Show 'Abre o meu formulário para iniciar o sistema



End Sub




 
Postado : 28/09/2016 1:58 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Bem vindo ao Planilhando, colega Luciano.

Quanto ao seu código, o problema de vc usar o contador/índice dos workbooks abertos para manipulá-los é que, cada vez q vc fecha um deles dentro do loop os índices mudam dinamicamente, ou seja, o que era o Workbooks(3) passa a ser o Workbooks(2), o 4 passa a ser o 3 e assim por diante, fazendo com que alguns deles "passem batidos" pelo controle. Melhor usar um for-each-next nesse caso.

Como sugestão:

Private Sub Workbook_Open()
   'VERIFICANDO PASTAS DE TRABALHO ABERTAS
   Dim wb As Workbook, Resposta as VbMsgBoxResult
   For Each wb In Workbooks
       If Not wb Is ThisWorkbook Then
           Resposta = MsgBox("Deseja salvar as alterações na Pasta: " & wb.Name, vbYesNo + vbExclamation, "VALEC-SUPRO")
           wb.Close SaveChanges:= (Resposta = vbYes)
       End If
   Next wb
   Set wb = Nothing
   ThisWorkbook.Application.Visible = True
   Form_login.Show 'Abre o meu formulário para iniciar o sistema
End Sub

 
Postado : 28/09/2016 8:01 pm
(@luciano_cs)
Posts: 4
New Member
Topic starter
 

Muito obrigado! Edson, ficou fantástico seu código aqui, bem enxuto e preciso...Valeu demais.

 
Postado : 29/09/2016 12:11 pm