MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    Determinando área de importação

    Compartilhe

    samuel010
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11
    Registrado : 13/09/2017

    Determinando área de importação

    Mensagem  samuel010 em 18/9/2017, 14:57

    Bom dia amigos (as)!
    Preciso de ajuda!
    Tenho arquivo que tem as três primeiras linhas desconfiguradas e desnecessárias para fazer importação em uma tabela, gostaria de saber como faço para determinar área de importação dentro do Access?
    Exemplo: Quero que importe informação a partir da linha 5 até aonde tiver informação?

    Desde já agradeço.
    avatar
    thiagomcosta
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 271
    Registrado : 23/01/2017

    Re: Determinando área de importação

    Mensagem  thiagomcosta em 18/9/2017, 15:19

    O arquivo está em qual formato?

    Veja se o tópico abaixo não lhe ajuda
    [Você precisa estar registrado e conectado para ver este link.]

    samuel010
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11
    Registrado : 13/09/2017

    Re: Determinando área de importação

    Mensagem  samuel010 em 18/9/2017, 20:49

    Boa tarde Thiagomcosta, Tudo bem?

    Na verdade preciso fazer uma importação em arquivos xls, xlsm ou csv.
    Não entendo muito de importação via Access, seja por consulta ou macro, estou bem leigo nessa parte ainda.
    Existe algum link que eu consiga acessar que contém o assunto, existe possibilidade de importar nos formatos que eu preciso determinado área antes?
    avatar
    thiagomcosta
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 271
    Registrado : 23/01/2017

    Re: Determinando área de importação

    Mensagem  thiagomcosta em 20/9/2017, 13:25

    Segue um exemplo que eu tenho aqui.

    Para teste com o arquivo excel que está junto coloque os seguintes parâmetros:
    Linha de Inicio: 5
    Coluna Nomes: B
    Coluna Título dos Versos: C
    Coluna Luxo: D
    Coluna Participação: F
    Coluna Box: E
    Anexos
    ExemploImportar.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (689 Kb) Baixado 7 vez(es)

    samuel010
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11
    Registrado : 13/09/2017

    Re: Determinando área de importação

    Mensagem  samuel010 em 20/9/2017, 14:59

    Bom dia Thiagomcosta!
    Está dando erro Formato de banco de dados "caminho do arquivo" não reconhecido, tentei abrir de outros computadores e continua poderia verificar o arquivo enviado?
    avatar
    thiagomcosta
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 271
    Registrado : 23/01/2017

    Re: Determinando área de importação

    Mensagem  thiagomcosta em 20/9/2017, 15:24

    Estou utilizando o Access 2010. Não consegui salvar em um formato mais antigo devido à alguns recursos utilizados.
    Qual a sua versão do Access?

    samuel010
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11
    Registrado : 13/09/2017

    Re: Determinando área de importação

    Mensagem  samuel010 em 20/9/2017, 15:27

    Estou usando versão 2007.
    avatar
    thiagomcosta
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 271
    Registrado : 23/01/2017

    Re: Determinando área de importação

    Mensagem  thiagomcosta em 21/9/2017, 17:35

    Pior que não consigo mesmo converter e não faço a mínima ideia de quais são os recursos incompatíveis com as versões anteriores.

    Segue o código que eu utilizo para importação:
    Código:

    Private Sub bt_Importa_Click()
    Dim vSQL As String
    Dim rsApaga As Recordset
    Dim vID As String, vFormando As String, vTitulo As String
    Dim vPos1 As String, vPos2 As String
    Dim vProcura, vOp
    Dim vCodGestaoIndiv
    Dim vLinha
    Dim appExcel As Excel.Application
    Dim wb As Excel.Workbook
    Dim sh As Excel.Worksheet
    Dim vContagem, vContaLimpa
    Dim SQLCampos, SQLValores
    Dim SQLCamposParc, SQLValoresParc
    Dim vContato

    If Nz(Me.ListaClientes, "") = "" Then 'Se não houver sido selecionado cliente
        MsgBox "Cliente não selecionado", vbCritical, "Erro"
        Exit Sub
    End If
    If Nz(Me.CaminhoArquivo, "") = "" Then 'Se não houver sido selecionado o arquivo de importação
        MsgBox "Arquivo não selecionado", vbCritical, "Erro"
        Exit Sub
    End If

    vProcura = DLookup("[Id_GestaoIndividual]", "tb_GestaoIndividual", "[Id_GestaoIndividual] = '" & Me.ListaClientes & "'")

    If Not IsNull(vProcura) Then 'Se já existem lançamentos para o cliente pergunta se deseja apagar
        vOp = MsgBox("Já existem lançamentos de valores para esta turma, deseja substituir?", vbYesNo, "Turma existente")
        If vOp = vbNo Then
            MsgBox "Operação cancelada!"
            Exit Sub
        Else 'Se deseja apagar apaga as infromorções de todas as tabelas
            vSQL = "SELECT Id_GestaoIndividual, CodGestaoIndividual FROM tb_GestaoIndividual WHERE Id_GestaoIndividual = '" & Me.ListaClientes & "'"
            Set rsApaga = CurrentDb.OpenRecordset(vSQL)
            rsApaga.MoveFirst
            DoCmd.SetWarnings False
            Do While Not rsApaga.EOF
                vCodGestaoIndiv = rsApaga!CodGestaoIndividual
                DoCmd.RunSQL "DELETE FROM tb_GestaoIndSub WHERE GestaoIndividual_GestaoIndSub = " & vCodGestaoIndiv
                rsApaga.MoveNext
            Loop
            DoCmd.RunSQL "DELETE FROM tb_GestaoIndividual WHERE Id_GestaoIndividual = '" & Me.ListaClientes & "'"
            DoCmd.SetWarnings True
        End If
    End If


    'INICIA A IMPORTAÇÃO DAS INFORMAÇÕES

    'Cria o objeto excel
    Set appExcel = CreateObject("Excel.Application")
    Set wb = appExcel.Workbooks.Open(CaminhoArquivo)

    'Começa a escrever a consulta SQL

    SQLCampos = " (Id_GestaoIndividual"
    If ColNome.ListIndex > 0 Then SQLCampos = SQLCampos & ", Nome_GestaoIndividual"
    If colCPF.ListIndex > 0 Then SQLCampos = SQLCampos & ", CPF_GestaoIndividual"
    If colEndereco.ListIndex > 0 Then SQLCampos = SQLCampos & ", Endereco_GestaoIndividual"
    If colCEP.ListIndex > 0 Then SQLCampos = SQLCampos & ", CEP_GestaoIndividual"
    If colCidade.ListIndex > 0 Then SQLCampos = SQLCampos & ", Cidade_GestaoIndividual"
    If colEstado.ListIndex > 0 Then SQLCampos = SQLCampos & ", Estado_GestaoIndividual"
    If colEmail.ListIndex > 0 Then SQLCampos = SQLCampos & ", Email_GestaoIndividual"
    If ColNome.ListIndex > 0 Then SQLCampos = SQLCampos & ", Contato_GestaoIndividual"
    SQLCampos = SQLCampos & ")"

    If IsNull(ListaPlanilhas) Then
        vPlanilha = ListaPlanilhas.ItemData(0)
    Else
        vPlanilha = ListaPlanilhas
    End If

    vLinha = 2

    'Inicia a importação lendo linha a linha da planilha
    DoCmd.SetWarnings False
    Do While True
        If wb.Worksheets(vPlanilha).Cells(vLinha, ColNome.ListIndex).Value = "" Then Exit Do
       
        vContato = RetiraAspas(Left(wb.Worksheets(vPlanilha).Cells(vLinha, ColNome.ListIndex).Value, InStr(1, wb.Worksheets(vPlanilha).Cells(vLinha, ColNome.ListIndex).Value, " ") - 1))
        SQLValores = " ('" & Me.ListaClientes & "'" 'ID
        If ColNome.ListIndex > 0 Then SQLValores = SQLValores & ", '" & RetiraAspas(wb.Worksheets(vPlanilha).Cells(vLinha, ColNome.ListIndex).Value) & "'" 'Nome
        If colCPF.ListIndex > 0 Then SQLValores = SQLValores & ",'" & Format(RetiraSinais(wb.Worksheets(vPlanilha).Cells(vLinha, colCPF.ListIndex).Value), "00000000000") & "'" 'CPF
        If colEndereco.ListIndex > 0 Then SQLValores = SQLValores & ",'" & RetiraAspas(wb.Worksheets(vPlanilha).Cells(vLinha, colEndereco.ListIndex).Value) & "'" 'Endereco
        If colCEP.ListIndex > 0 Then SQLValores = SQLValores & ",'" & RetiraSinais(wb.Worksheets(vPlanilha).Cells(vLinha, colCEP.ListIndex).Value) & "'" 'CEP
        If colCidade.ListIndex > 0 Then SQLValores = SQLValores & ",'" & RetiraAspas(wb.Worksheets(vPlanilha).Cells(vLinha, colCidade.ListIndex).Value) & "'" 'Cidade
        If colEstado.ListIndex > 0 Then SQLValores = SQLValores & ",'" & RetiraAspas(wb.Worksheets(vPlanilha).Cells(vLinha, colEstado.ListIndex).Value) & "'" 'Estado
        If colEmail.ListIndex > 0 Then SQLValores = SQLValores & ",'" & RetiraAspas(wb.Worksheets(vPlanilha).Cells(vLinha, colEmail.ListIndex).Value) & "'" 'Email
        If ColNome.ListIndex > 0 Then SQLValores = SQLValores & ",'" & vContato & "' " 'Contato
        SQLValores = SQLValores & ") "
       
        DoCmd.RunSQL "INSERT INTO tb_GestaoIndividual " & SQLCampos & " VALUES " & SQLValores & ";"
       
        'Lança valores das parcelas
        For i = colParcelas.ListIndex To 100 Step 2
            If wb.Worksheets(vPlanilha).Cells(vLinha, i).Value = "" Then Exit For
            vCodGestaoIndiv = DLookup("[CodGestaoIndividual]", "tb_GestaoIndividual", "[Id_GestaoIndividual]= '" & Me.ListaClientes & "' AND [Nome_GestaoIndividual] = '" & RetiraAspas(wb.Worksheets(vPlanilha).Cells(vLinha, ColNome.ListIndex).Value) & "'")
            SQLCamposParc = "INSERT INTO tb_GestaoIndSub (GestaoIndividual_GestaoIndSub, Valor_GestaoIndSub, Vencimento_GestaoIndSub) "
            SQLValoresParc = "VALUES ("
            SQLValoresParc = SQLValoresParc & vCodGestaoIndiv & ", "
            SQLValoresParc = SQLValoresParc & Replace(wb.Worksheets(vPlanilha).Cells(vLinha, i + 1).Value, ",", ".") & ", "
            SQLValoresParc = SQLValoresParc & "#" & Format(wb.Worksheets(vPlanilha).Cells(vLinha, i).Value, "mm/dd/yyyy") & "#)"
            DoCmd.RunSQL SQLCamposParc & SQLValoresParc
        Next i
        vLinha = vLinha + 1
    Loop


    'Fecha o Excel sem salvar
    wb.Close False
    appExcel.Quit

    DoCmd.SetWarnings True

    DoCmd.Close acForm, "fm_GestaoIndividual_Main", acSaveYes
    DoCmd.OpenForm "fm_GestaoIndividual_Main", , , "[Id_GestaoIndividual]='" & Me.ListaClientes & "'", , , Me.ListaClientes
    DoCmd.Close acForm, "fm_ImportaGestaoIndividual2", acSaveYes

    MsgBox "Valores importados com sucesso"

    End Sub

    Eu sei que fica confuso desta maneira, mas infelizmente não consegui converter.

      Data/hora atual: 17/8/2018, 14:48