MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

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

    (RESOLVIDO) Copiar apenas uma linha do excel e colar como um novo registro de tabela específica do Access.

    Compartilhe

    diegoaraujo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 5
    Registrado : 10/09/2016

    (RESOLVIDO) Copiar apenas uma linha do excel e colar como um novo registro de tabela específica do Access.

    Mensagem  diegoaraujo em Qua 26 Out 2016, 16:08

    Pessoal, boa tarde!




    Busquei tanto no maximoaccess como em outros fóruns do Brasil e do exterior mas não achei função semelhante.


    A função é tão simples que não quis usar DAO ou DOA para fazer o excel e o access conversarem. O volume é muito pequeno, então mesmo que o desempenho seja bem menor da forma que estou codificando atenderá com folga minha necessidade.


    Detalhes da operação a ser realizada:


    Tenho uma planilha do Excel "Formulario_LC.xlsx", com uma aba "Formulario_LC" que sempre terá apenas duas linhas preenchidas:
      Linha 1 - cabeçalho (rótulo dos dados)
      Linha 2 - 114 colunas com dados


    Tenho uma tabela "BD_LC" no banco "CAP_be2.accdb", que foi criada com base na planilha do excel, ou seja, já está devidamente formatada para receber os dados, tanto que o "copiar e colar" manual já funciona.

    Preciso copiar a linha 2 da aba "Formulario" e colar como um novo registro na "BD_LC". Já tenho boa parte do código (e está funcionando até o momento).

    A função "gravar macro" do excel não permite a realização de comandos no access, senão já estava resolvido rs.

    Para concluir o código abaixo, preciso saber como:

    1. SELECIONAR POR INTEIRO SEMPRE A 1ª LINHA da tabela "BD_LC" EM BRANCO (a linha com asterisco - "novo registro")

    2. COLAR (da área de transferência)

    3. FECHAR O ACCESS.


    Abaixo segue o código que já tenho até o momento para referência.


    Código:
    Sub AccessMacro()

    Dim app As Object
    Set app = CreateObject("Access.Application")
    app.OpenCurrentDatabase "Q:\0001\CAP_be2.accdb"
    app.Visible = True
    app.DoCmd.openTable "BD_LC"

    Workbooks.Open Filename:= _
           "Q:\0000\Formulario_LC.xlsx"
       Rows("2:2").Select
       Selection.Copy

    app.UserControl = True '//If you want to hand control over to user, otherwise Access closes when the routine finishes

    Application.DisplayAlerts = False 'desabilite o alerta
      Workbooks("Formulario_LC.xlsx").Close
      Application.DisplayAlerts = True 'habilite novamente
    End Sub



    Agradeço a atenção dispensada!


    Última edição por diegoaraujo em Sab 12 Nov 2016, 14:30, editado 3 vez(es)

    diegoaraujo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 5
    Registrado : 10/09/2016

    Re: (RESOLVIDO) Copiar apenas uma linha do excel e colar como um novo registro de tabela específica do Access.

    Mensagem  diegoaraujo em Qui 27 Out 2016, 11:42

    Bom dia Pessoal,

    Consegui resolver.

    Segue o código, caso possa ajudar alguém.

    O que o código faz:

    Salva a linha 2 de um planilha do excel como um novo registro numa tabela do Access.



    Limitações

    A tabela do access precisa ter previamente ao menos um registro, senão o código dará erro.


    Excel
    Formulario_LC.xlsm

    Access
    CAP_Be.accdb
    tabela BD_LC


    No Excel, aperte ALT+F11. No menu superior, vá em "Ferramentas", depois em "Referências...". Habilite o Microsoft Access 16.0 Object Library".

    Crie o seguinte módulo no excel:

    Código:
    Sub AccessMacro()


    Workbooks.Open Filename:= _
            "Q:\0000\Formulario_LC.xlsx"
        Rows("2:2").Select
        Selection.Copy

    Application.DisplayAlerts = False 'desabilite o alerta
        
    Dim sCaminho As String

    Dim obj As Object

    Dim appObj As Object

    sCaminho = "Q:\0001\CAP_be2.accdb"

    Set appObj = CreateObject("Access.Application")

    'A linha de baixo é opcional

    appObj.Visible = True

    appObj.OpenCurrentDatabase sCaminho

    appObj.Run "Conreg"

    appObj.Quit

      
    Workbooks("Formulario_LC.xlsx").Close

    Application.DisplayAlerts = True 'habilite novamente

    Workbooks("EXTRATOR_CAP.xlsm").Activate

    Range("txt_campos").ClearContents

    End Sub




    Crie o seguinte módulo no access:

    Código:

    Sub Conreg()
        DoCmd.OpenTable "BD_LC"
        DoCmd.RunCommand acCmdRecordsGoToLast
        DoCmd.RunCommand acCmdRecordsGoToNew
        DoCmd.RunCommand acCmdSelectRecord
        DoCmd.RunCommand acCmdPasteAppend
        DoCmd.RunCommand acCmdSaveRecord
       ' DoCmd.RunCommand acCmdCloseDatabase
    End Sub


    Agora é só atribuir o botão no excel para rodar a macro e pronto.

    Ainda estou fazendo os alertas de erro para ficar perfeito, depois posto aqui.






    Se alguém puder ajudar: algumas vezes terei que reincluir um formulario. Alguém indica qual código coloco IF eu coloco para "limpar o novo registro q acabou de receber dados colados do clipboard", ir ao registro já existente e atualizar os dados?

    Obrigado!

    diegoaraujo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 5
    Registrado : 10/09/2016

    Re: (RESOLVIDO) Copiar apenas uma linha do excel e colar como um novo registro de tabela específica do Access.

    Mensagem  diegoaraujo em Ter 08 Nov 2016, 20:14

    Pessoal, tive um problema sério por aqui.

    Fiz o teste milhares de vezes e sempre funcionou comigo (quando eu mesmo preencho o excel).

    O arquivo de macro vba que gera esse formulário é exatamente o mesmo nos dois casos. Os números gerados seguem a mesma forma, conforme o print abaixo:

    Porém, para novos casos (mesmo com o formato dos números e texto exatamente igual), já no primeiro campo ele dá erro quando vou colar, dizendo que o "o valor digitado não corresponde ao tipo dessa coluna). Porém, vejam que a linha de teste (Diego) é igual, inclusive a formatação.

    Alguém tem ideia do que pode estar acontecendo?

    Muito obrigado.

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: (RESOLVIDO) Copiar apenas uma linha do excel e colar como um novo registro de tabela específica do Access.

    Mensagem  Alexandre Neves em Sab 12 Nov 2016, 14:24

    Boa tarde,
    Adeqúe o título
    Respeite as regras do fórum
    Não utilize a palavra urgente, ninguém é obrigado a ajudar


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

      Data/hora atual: Sex 09 Dez 2016, 07:44