Ir ao conteúdo

Excel Carregamento de pasta, arquivos e botões de comando dentro do listbox/listview


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

Boa tarde, atualmente assisti uma aula de um canal guiadoexcel (vídeo: Planilha de Gestão de Documentos Excel) e me deparei com uma situação em que era possível criar lisview/listbox e CARREGAR, criar e editar pastas e documentos dentro do Userform. Alguém teria material para estudo deste tipo de comando ou teria material de rascunho? Gostaria muito de estudar e aprender. Desde já agradeço a disponibilidade de todos. @Midori  ou outra pessoa :( Desde já agradeço a disponibilidade :) 

Postado

@josequali Para carregar documentos de outro aplicativo você pode usar o comando Shell e passar o nome executável (winword.exe para o word p.ex) e o caminho do arquivo para carregar no próprio aplicativo e editar nele. E para procurar um arquivo no disco tem GetOpenFilename.

Postado

@Midoriteria algum exemplo de de planilha? Sou um pouco leigo. Seria algo como carregar a pasta literalmente dentro do useform e mostra os documentos que tem dentro dele e edita-los ao clicar por exemplo em um doc do word e depois salvar em uma nova versao o documento na mesma pasta. Como no vídeo do youtube:  Planilha de Gestão de Documentos Excel.

Postado

@josequali Os controles do formulário só vão mostrar o nome ou caminho do arquivo e executar o comando para abrir o aplicativo.

 

Com ListBox p.ex listando os nomes de arquivos do word. No evento click do ListBox vai abrir o arquivo selecionado na lista e no evento click do formulário vai abrir uma caixa de diálogo para procurar um documento.

 

Private Sub ListBox1_Click()
    Shell "winword.exe " & _
        ListBox1.List(ListBox1.ListIndex), vbNormalFocus
End Sub

Private Sub UserForm_Click()
    Dim Arquivo As Variant
    
    Arquivo = Application. _
        GetOpenFilename("Documentos (*.docx), *.docx")
    
    If Arquivo <> False Then
        Shell "winword.exe " & Arquivo, vbNormalFocus
    End If
End Sub

Private Sub UserForm_Initialize()
    Dim Arquivo As String
    Dim Pasta   As String
    
    Pasta = "C:\Teste\"
    Arquivo = Dir(Pasta & "*.docx")
    
    While Arquivo <> ""
        ListBox1.AddItem Pasta & Arquivo
        Arquivo = Dir
    Wend
End Sub

 

Postado

@Midori  Reformulei a minha questão. Preciso executar o seguinte comando. Tenho uma pasta no disco C chamada de Documentos. Dentro dessa pasta quero cadastrar/criar novas pastas (usando a textbox1) e ter essas pastas depois carregadas na listbox1.

 

A segunda etapa é que após cadastrar a pasta, gostaria de criar uma subpasta dentro da nova pasta criada usando o combobox1 para encontrar a anterior criada. Por exemplo: Criar uma pasta chamada Teste1 e depois quando clicar na combobox1 ela já carregue o nome dessa pasta (teste1). Em seguida após selecionada a pasta na combobox1, ao  digitar o nome da subpasta na textbox2 ela salva a pasta Teste2 dentro da pasta Teste1. Encontrei um código mas ele já criar as pasta com nomes padrões, não permitindo alteração Segue em anexo o código.

 

E a ultima etapa e poder excluir a pasta ao selecionar a linha e clicar no botão excluir pasta com confirmação de ação.

Segue em anexo o modelo. Desde já agradeço a ajuda.

 

 

image.png.d9577133b5d765ef9c4876c442843518.png

teste.rar

Postado

@josequali Criei as funções de Criar e Excluir as pastas já considerando a pasta principal que deve ser atribuída como constante, assim fica mais seguro usar essas funções já que será tudo feito apenas dentro do diretório principal com a sub pasta como parâmetro.

 

Option Explicit

Dim Fso As Object

Const PASTA_PRINCIPAL As String = "C:\Documentos\"

Private Sub UserForm_Initialize()
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Call AtualizaLista(ListBox1)
    Call AtualizaLista(ComboBox1)
End Sub

Rem Exclui pasta
Private Sub CommandButton1_Click()
    If ListBox1.ListIndex <> -1 Then
        Dim msg         As VbMsgBoxResult
        Dim Pasta       As String
        
        Pasta = ListBox1.List(ListBox1.ListIndex)
        msg = MsgBox("Deseja excluir a pasta " & _
            Pasta & "?", vbQuestion + vbYesNo)
        
        If msg = vbYes Then
            If RemovePasta(Pasta) = True Then
                MsgBox "Pasta exluída com sucesso"
                Call AtualizaLista(ListBox1)
                Call AtualizaLista(ComboBox1)
            End If
        End If
    End If
End Sub

Rem Cadastra SubPasta
Private Sub CommandButton2_Click()
    If ComboBox1 <> "" Then
        If CriaPasta(ComboBox1.Text & "\" & TextBox2.Text) Then
            Call AtualizaLista(ListBox1)
        End If
    End If
End Sub

Rem Cadastra Pasta
Private Sub CommandButton3_Click()
    If CriaPasta(TextBox1.Text) = True Then
        Call AtualizaLista(ListBox1)
        Call AtualizaLista(ComboBox1)
    End If
End Sub

Private Function CriaPasta(Pasta As String) As Boolean
    If Trim(Pasta) = "" Then Exit Function
    If Not Fso.FolderExists(PASTA_PRINCIPAL & Pasta) Then
        Call Fso.CreateFolder(PASTA_PRINCIPAL & Pasta)
        CriaPasta = True
    End If
End Function

Private Function RemovePasta(Pasta As String) As Boolean
    If Trim(Pasta) = "" Then Exit Function
    If Fso.FolderExists(PASTA_PRINCIPAL & Pasta) = True Then
        Call Fso.DeleteFolder(PASTA_PRINCIPAL & Pasta, True)
        RemovePasta = True
    End If
End Function

Private Sub AtualizaLista(Controle As Object)
    Dim Pasta As Object
    Controle.Clear
    For Each Pasta In Fso.GetFolder(PASTA_PRINCIPAL).SubFolders
        If Pasta.SubFolders.Count <> 0 And _
        TypeName(Controle) <> "ComboBox" Then
            Dim SubPasta As Object
            For Each SubPasta In Pasta.SubFolders
                Controle.AddItem Pasta.Name & "\" & SubPasta.Name
            Next SubPasta
        End If
        Controle.AddItem Pasta.Name
    Next Pasta
End Sub

 

  • Curtir 1
Postado

@Midori perfeito :) Muito obrigado!

 

@Midori Como eu faria agora na seguinte situação:

Tenho um documento seja no Desktop ou em qualquer outro local (pode ser pdf, excel, word ou imagem) e quero criar uma cópia desse documento para uma das Pastas ou Subpastas, selecionando as combobox2 e 3, para a pasta e subpasta. 
Sendo que ao selecionar a Pasta na combobox2 ela já carrega na comobox3 as subpastas desta pasta. 

Em seguida, para anexar o documento o botão deve-se clicar no botão Anexar arquivo para procura o arquivo no computado e coloca o caminho na textbox2. Já na  textbox 3 é onde deve-se inserir o nome como o documento deverá ser salvo da pasta selecionada previamente. Desde já agradeço a disponibilidade :) Muti obrigado :D 

 

 

 

image.png.2cfe005b74e27f8edea895efc6096d12.png

teste2.rar

Postado

@josequali Pode modificar a Sub RemovePasta para mover em vez de deletar,

 

Private Function RemovePasta(Pasta As String) As Boolean
    If Trim(Pasta) = "" Or Pasta = "Lixeira" Then Exit Function
    If Fso.FolderExists(PASTA_PRINCIPAL & Pasta) = True Then
        Call Fso.MoveFolder(PASTA_PRINCIPAL & Pasta, PASTA_PRINCIPAL & "Lixeira\")
        RemovePasta = True
    End If
End Function

 

  • Solução
Postado

@josequali Para renomear pode ser com MoveFolder também, p.ex para renomear uma pasta dentro da principal.

 

Private Function RenomearPasta(Atual As String, Nova As String) As Boolean
    If Trim(Atual) = "" Or Trim(Nova) = "" Then Exit Function
    If Fso.FolderExists(PASTA_PRINCIPAL & Nova) = True Then
        MsgBox "A pasta " & Nova & " já existe"
        Exit Function
    End If
    If Fso.FolderExists(PASTA_PRINCIPAL & Atual) = True Then
        Call Fso.MoveFolder(PASTA_PRINCIPAL & Atual, PASTA_PRINCIPAL & Nova)
        RenomearPasta = True
    End If
End Function

 

Se for uma sub pasta você vai ter que passar a outra também se não a função vai mover para a principal.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...