Notifications
Clear all

criar pasta se não tem, não criar se já tem

8 Posts
2 Usuários
0 Reactions
1,540 Visualizações
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Oi. Eu preciso que meu excel verifique se já existe uma determinada pasta (isso ele já faz). A ideia é que se já existir a pasta, ele ignora. Se não tem, ele cria. E só depois disso, ele salva (o meu código abaixo serve apenas para salvar. Eu tenho que criar manualmente a pasta. E é isso que eu quero evitar. Eu só encontrei situações parecidas no google. Mas fiquei com medo de mexer no meu código, pois era mto diferente.
Abaixo o código:

 Dim periodo As String
        periodo = InputBox("Olá. Conforme você solicitou, vamos agora CRIAR UMA CÓPIA do arquivo para NOVOS lançamentos. Por favor, informe o nome do mês/ano no seguinte formato: janeiro.2014")
        Plan13.Unprotect
        Plan13.Range("a1") = periodo
        ChDir "C:Sistema de administração financeira"
        ActiveWorkbook.SaveAs Filename:="C:Sistema de administração financeiraSistema de administração financeira " & Plan13.Range("a1").Value & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
        ActiveWorkbook.Save
        MsgBox "Obrigado. Você pode acessar o novo arquivo em C:Sistema de administração financeira e realizar os novos lançamentos."

Obrigado desde já!!!

 
Postado : 08/08/2014 2:48 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Já ouviu falar em FileSystemObject?

É um treco super bacana... Siga os passos:

    - No VBE, vá em ferramentas / Referências e encontre Microsoft Scripting Runtime, selecione essa caixinha. Importante, faça isso para facilitar seu desenvolvimento. Essa referência vai ficar gravada no arquivo para sempre.
    - Substitua seu código por esse:

    Dim fso     As New Scripting.FileSystemObject
    Dim periodo As String
    Dim Msg     As String
    Dim Pasta   As String
    Dim Arquivo As String
    
        Msg = "Olá. Conforme você solicitou, vamos agora CRIAR UMA CÓPIA do arquivo para NOVOS lançamentos."
        Msg = Msg & "Por favor, informe o nome do mês/ano no seguinte formato: janeiro.2014"
        periodo = InputBox(Msg)
        With Plan13
            .Unprotect
            .Range("a1") = periodo
        End With
        
        Pasta = "C:Sistema de administração financeira"
        If Not fso.FolderExists(Pasta) Then fso.CreateFolder Pasta
        
        Arquivo = Pasta & "Sistema de administração financeira " & periodo & ".xlsm"
        
        With ActiveWorkbook
            .SaveAs Filename:=Arquivo, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
            .Save
        End With
        
        Set fso = Nothing
        
        MsgBox "Obrigado. Você pode acessar o novo arquivo em C:Sistema de administração financeira e realizar os novos lançamentos."
    

    [/list:u:2gaaq5ng]

    Lá dentro, as linhas específicas que resolvem seus problemas são:
    Pasta = "C:Sistema de administração financeira"
    If Not fso.FolderExists(Pasta) Then fso.CreateFolder Pasta

    As variáveis eu crio para facilitar a leitura.
    O objeto fso é do tipo FileSystemObject, e libera funções de disco e gerenciamento de arquivos

    E o resultado vc confere no código acima!

    Qquer coisa, grita!

    Existem mil maneiras de preparar Neston. Invente a sua!
    http://www.youtube.com/ExpressoExcel

     
Postado : 08/08/2014 3:59 pm
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Nunca tinha ouvido falar! Selecionei a caixinha. Qual o benefício dela estar selecionada?
Amanhã de manhã farei os testes.
Fernando, como eu ainda tenho dificuldades com as variáveis, não entendo bem a relação que elas tem dentro da programação.
Você conhece algum vídeo no youtube que explique bem isso?
Valeu mais uma vez!!!!

 
Postado : 08/08/2014 11:04 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

O benefício da caixinha selecionada?
Puts, assim, é uma longa história... Pensa q vc habilitou para aquele arquivo específico uma biblioteca que permite controlar e gerenciar arquivos, pastas (ou diretórios) , drives....
Não é só uma caixinha, vc está dizendo para o Excel. Que ele pode controlar o disco rígido.

Há formas de fazer sem isso? Sim. Mas essa forma é mais fácil e didática. Se quiser ir mais a fundo, procure early binding ou late binding na Internet. Pra ter certeza que achou o tópico certo, vai ter CreateObject () no tópico...

Qto a variáveis, não tenho vídeos do YouTube explicando, vc precisará procurar, mas posso explicar meu *padrão. Sempre uso variáveis para textos cumpridos. Isso facilita a leitura posterior do código.
É só dar uma olhada no que escrevi para ter uma boa noção da diferença.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 09/08/2014 1:34 am
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Oi Fernando. Fui testar teu código e deu o seguinte:
Ele selecionou o "fso As New Scripting.FileSystemObject"
e deu:
"Erro de compilação:
O tipo definido pelo usuário não foi definido"

Pq será?

Sobre tua outra resposta ali em cima, entendi. Fez sentido pra mim. Valeu!

 
Postado : 09/08/2014 6:25 pm
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Fernando, erro primário meu tmb. Eu havia inserido o Microsoft Scripting Runtime em outro arquivo e não havia inserido neste. Agora eu inseri e deu tudo certo!!!! Cara, demais este código!!! Fantástico!!
Muito obrigado, Fernando!!!

 
Postado : 09/08/2014 8:41 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Legal, clica na mãozinha para agradecer, marque a resposta com o V verde, encerrando o tópico...

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 09/08/2014 8:58 pm
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

hehehe Esqueci! Estou aqui quebrando a cabeça numa outra situação. Valeu mesmo!!!

 
Postado : 09/08/2014 9:00 pm