MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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

2 participantes

    [Resolvido]Código VBA não fecha excel após importar dados

    avatar
    enio.eltz
    Intermediário
    Intermediário

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 19/07/2016

    [Resolvido]Código VBA não fecha excel após importar dados Empty [Resolvido]Código VBA não fecha excel após importar dados

    Mensagem  enio.eltz 18/5/2021, 21:44

    Boa tarde

    Pesquisando aqui no forum e em outras documentações eu consegui criar um códido para importar dados de uma planilha do Excel 2013 para uma tabela do Access 2013.

    O código é:

    Código:
       If Len(Me.campo_caminho_arquivo & vbNullString) = 0 Then ' Testa se local contém alguma coisa
            MsgBox "Informe o nome do arquivo a ser importado", vbExclamation + vbOKOnly, "Vazio"
            Me.campo_caminho_arquivo.SetFocus
            Exit Sub
        End If
        If Len(Dir(Me.campo_caminho_arquivo)) = 0 Then ' Testa a existência do arquivo
            MsgBox "O arquivo não existe!!!", vbCritical + vbOKOnly, "Erro"
            Me.campo_caminho_arquivo.SetFocus
            Exit Sub
        End If
        
        FILE = Me.campo_caminho_arquivo 'faz FILE como o diretório do arquivo + arquivo
        
        Dim msgConfirmacao As VBA.VbMsgBoxResult
        
        msgConfirmacao = MsgBox("Deseja Realmente incluir os dados no Banco de Dados?", vbQuestion + vbYesNo, "Importar")
        
        Dim appExcel As Excel.Application
        Dim wb As Excel.Workbook
        Dim sh As Excel.Worksheet
        Dim strValue As String
        Dim strTable As String
        
        strTable = "tbl_CadDIDs"
        Set appExcel = CreateObject("Excel.Application")
        Set wb = appExcel.Workbooks.Open(FILE)
        For Each sh In wb.Sheets
        Debug.Print sh.Name
        DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, strTable, FILE, True, sh.Name & "!"
        Next
        wb.Close
        On Error GoTo 0
        
        MsgBox "Importação Concluída com Sucesso!!"
        
        Forms!fml_CadDIDs.Requery
        Me.campo_caminho_arquivo.Value = ""
        DoCmd.GoToRecord , , acLast
        Me.bt_novo.SetFocus

    End Sub

    Quando eu faço a importação, ela ocorre com sucesso. Os dados da planilha são gravados com sucesso na tabela, sem erros.

    Porém eu vejo que, ao iniciar a importação o arquivo selecionado é aberto no Excel, e após concluir a importação o arquivo não é fechado. O Excel mantém o arquivo aberto.

    Pelo que entendi do código, na linha Set wb = appExcel.Workbooks.Open(FILE) o arquivo é aberto. E wb.Close talvez fosse a linha que fecharia.

    Mas não fecha. Tentei configurar alguma linhas pesquisando aqui no forum e também outras fontes mas sem sucesso.

    Se algum amigo puder me ajudar, agradeço desde já.

    Muito obrigado!!!

    Enio Eltz Filho
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1818
    Registrado : 13/12/2016

    [Resolvido]Código VBA não fecha excel após importar dados Empty Re: [Resolvido]Código VBA não fecha excel após importar dados

    Mensagem  Alexandre Fim 18/5/2021, 22:31

    Olá Enio,

    É necessário limpá-los da memória também. Segue:

    Código:


        wb.Close
        Set wb = Nothing




    boa sorte

    []'s

    FIM

    enio.eltz gosta desta mensagem

    avatar
    enio.eltz
    Intermediário
    Intermediário

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 19/07/2016

    [Resolvido]Código VBA não fecha excel após importar dados Empty Re: [Resolvido]Código VBA não fecha excel após importar dados

    Mensagem  enio.eltz 19/5/2021, 15:02

    Bom dia Alexandre

    Antes de tudo gostaria de agradecer pela rápida e acertiva resposta em relação a situação.

    Adicionei a linha Set wb = Nothing conforme você instruiu e está funcionando corretamente.

    Na verdade, lembro que quando eu pesquisei os primeiros códigos para realizar a importação que preciso, essa linha existia. Provavelmente nos meus testes para atingir outros objetivos eu copiei código sem essa linha e não percebi. O que ocasionou o problema.

    Muito obrigado!!! Very Happy Very Happy

    Enio Eltz Filho
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1818
    Registrado : 13/12/2016

    [Resolvido]Código VBA não fecha excel após importar dados Empty Re: [Resolvido]Código VBA não fecha excel após importar dados

    Mensagem  Alexandre Fim 19/5/2021, 16:38

    Valeu Enio...
    O fórum agradece.

    Boa sorte e sucesso !!!
    avatar
    enio.eltz
    Intermediário
    Intermediário

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 19/07/2016

    [Resolvido]Código VBA não fecha excel após importar dados Empty Re: [Resolvido]Código VBA não fecha excel após importar dados

    Mensagem  enio.eltz 20/5/2021, 12:19

    Bom dia

    Assim como eu, outras pessoas podem precisar realizar a importação. Então vou colocar aqui o que eu fiz para ficar de exemplo. É claro que existe outras maneiras de fazer e outras necessidades, mas da forma descrita abaixo atendeu a minha necessidade.


    No formulário eu criei uma caixa de texto para mostrar o diretório e o arquivo a ser importado (campo_caminho_arquivo), um botão de comando (bt_com_1) para buscar o arquivo no diretório e um botão de comando para realizar a importação (bt_importa_did).

    No botão de comando para buscar o arquivo, o procedimento do evento "ao clicar" executa isso:

    Código:
    Private Sub bt_com_1_Click()
        Call AbrirArquivo

    Em módulos, foi usado esse código:

    Código:
    Function AbrirArquivo(Optional strTitulo As String) As String
    Dim fd As FileDialog
    Dim ARQ As String
    Dim i As Integer

        Set fd = Application.FileDialog(msoFileDialogOpen)
        
            With fd
            .Filters.Clear
            .Filters.Add "Arquivos Excel", "*.xlsx", 1 'usado para mostrar somente arquivos .xlsx do Excel
            .InitialFileName = "C:\diretorio_que voce_vai_usar\"
                    
                If strTitulo <> "" Then
                    fd.Title = strTitulo
                End If
            
                If fd.Show = -1 Then
                    For i = 1 To fd.SelectedItems.Count
                    Forms!fml_CadDIDs!campo_caminho_arquivo = fd.SelectedItems(1)
                    Exit For
                    Next
                End If
                
            End With
      
        Set fd = Nothing
    End Function

    Ao selecionar o arquivo a caixa de texto "campo_caminho_arquivo" é preenchida com diretório + nome do arquivo.

    No botão de comando para importar, o procedimento do evento "ao clicar" executa isso:

    Código:
    Private Sub bt_importa_did_Click()

        If Len(Me.campo_caminho_arquivo & vbNullString) = 0 Then ' Testa se local contém alguma coisa
            MsgBox "Informe o nome do arquivo a ser importado", vbExclamation + vbOKOnly, "Vazio"
            Me.campo_caminho_arquivo.SetFocus
            Exit Sub
        End If
        If Len(Dir(Me.campo_caminho_arquivo)) = 0 Then ' Testa a existência do arquivo
            MsgBox "O arquivo não existe!!!", vbCritical + vbOKOnly, "Erro"
            Me.campo_caminho_arquivo.SetFocus
            Exit Sub
        End If
        
        FILE = Me.campo_caminho_arquivo 'faz FILE como o diretório do arquivo + arquivo
        
        If MsgBox("Deseja Realmente incluir os dados no Banco de Dados?", vbQuestion + vbYesNo, "Importar") = vbYes Then
            
        Dim appExcel As Excel.Application
        Dim wb As Excel.Workbook
        Dim sh As Excel.Worksheet
        Dim strValue As String
        Dim strTable As String
        
        strTable = "tbl_CadDIDs" 'tabela
        Set appExcel = CreateObject("Excel.Application")
        Set wb = appExcel.Workbooks.Open(FILE) 'abre o arquivo
        For Each sh In wb.Sheets
        Debug.Print sh.Name
        DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, strTable, FILE, True, sh.Name & "!" 'importa
        Next
        wb.Close
        Set wb = Nothing
        
        MsgBox "Importação Concluída com Sucesso!!" 'mensagem de sucesso
        
        Forms!fml_CadDIDs.Requery
        Me.campo_caminho_arquivo.Value = ""
        DoCmd.GoToRecord , , acLast
        Me.bt_novo.SetFocus
        
        Else
            Cancel = True
            Me.campo_caminho_arquivo.Value = ""
            DoCmd.GoToRecord , , acLast
            Me.bt_com_1.SetFocus
        End If

    End Sub

    Ao clicar no botão para importar, uma msgbox é mostrada perguntando se você quer importar. Clicando em sim, importa os arquivos. Clicando em não, limpa a caixa de texto "campo_caminho"arquivo", vai para o último registro do formulário e foco no botão para buscar arquivo novamente.

    Saudações! Very Happy

    Enio Eltz Filho.

      Data/hora atual: 16/10/2021, 22:22