none
Excel VBA Copiar - Criar uma ficheiro tipo Base de dados - URGENTE :(

    Question

  • Boas,

    Este é o meu primeiro post.

    Eu gostaria de efetuar algo parecido com este thread:

    http://social.msdn.microsoft.com/Forums/pt/excelpt/thread/d5f68441-c6d9-4130-802a-284b61c6c8f4

    Mas, em vez de copiar toda a planilha,

    Copiar determinadas celulas, p.ex "c5" "d4", etc... , de uma planilha oculta da minha pasta de trabalho que estou trabalhando/ativa, para uma pasta de trabalho fechada (registo.xls) guardada p.ex (c:\Documentos\registo.xls), sem que os dados fosse substituidos e estes fossem adicionados automaticamente, adicionando linhas...

    Exemplo do que seria a paste de trabalho registo.xls:

    Obrigado pela ajuda desde já.

    Luis Costa


    Wednesday, May 09, 2012 4:45 PM

All replies

  • Olá,

    O exemplo abaixo insere um registro numa Pasta de Trabalho fechada. A Pasta de Trabalho está no caminho c:\temp\banco.xlsx e ela deve possuir uma Planilha chamada Plan1 que contém nas células:

    A1=Ref

    B1=Ano

    C1=Mês

    D1=Zona

    Private Sub ADO_Excel()
        
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        
        Dim strDB As String
        Dim strSQL As String
        
        Dim n As Long
        
        'Instancia-se uma nova Conexão e um novo RecordSet:
        Set cn = New ADODB.Connection
        Set rs = New ADODB.Recordset
        
        'Caminho da Pasta de Trabalho:
        strDB = "C:\Temp\Banco.xlsx"
        
        'Aqui cria-se a cadeia de conexão. Note que ela pode
        'variar em função da versão do Excel utilizado:
        If Application.Version < 12 Then
            cn.ConnectionString = _
              "Provider=Microsoft.Jet.OLEDB.4.0;" & _
              "Data Source=" & strDB & ";" & _
              "Extended Properties=Excel 8.0"
        Else
            cn.ConnectionString = _
              "Provider=Microsoft.ACE.OLEDB.12.0;" & _
              "Data Source=" & strDB & ";" & _
              "Extended Properties=Excel 8.0"
        End If
        cn.Open 'Abre a conexão
        
        'Consulta SQL a ser feita. Observe o símbolo de $ feita
        'ao fim de cada nome de tabela.
        strSQL = _
          "INSERT INTO [Plan1$] VALUES ('refteste', 'anoteste', 'mêsteste', 'zonateste')"
        
        'Executa consulta
        Set rs = cn.Execute(strSQL)
        
        'Fecha Conexão
        cn.Close
        
    End Sub

    Para usar o código acima, você deve referenciar a biblioteca Microsoft ActiveX Data Objetos Library 2.0 (se não entendeu, clique aqui).

    Não entendi quando disse que quer adicionar automaticamente. Você quer que os dados sejam adicionados à medida que forem inseridos na Planilha? Se for isso, você deverá adaptar o código para o evento Worksheet_Change de sua Pasta de Trabalho.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    Sunday, May 13, 2012 10:06 PM
    Moderator
  • Bom dia,

    Antes de mais obrigado pela Colaboração.

    Eu tenho um modelo de pasta de trabalho, do qual executo os orçamentos para os clientes.

    Ao dizer automaticamente, o que queria dizer, é que eu tenho nesse modelo um  CommandButton1_Click(), associado a codigo VBA, que grava a pasta de trabalho aberta,  gera um diretorio com o nome da pasta de trabalho e um documento Word tamabem com o nome da pasta de trabalho, e, ao clicar, alem de efetuar as accoes ja associadas ao codigo, gostaria também que copiasse determinados dados (nome cliente; preço; data; refªcliente, etc..) para o meu banco de dados.

    Cumprimentos,

    Luis Costa


    Monday, May 14, 2012 9:54 AM
  • Quais são os dados que quer gravar e onde quer gravá-los?

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    Monday, May 14, 2012 10:18 PM
    Moderator
  • Boa tarde Felipe,

    Junto pasta de trabalho em anexo que acabei de criar (sendo este o Workbook onde quero gravar os dados), com os dados que pretendo gravar. 

    https://www.yousendit.com/download/QlVockhjckl6RTh3anNUQw

    Os nomes dos dados correspondem com os dados do workbook que enviei na resposta anterior.

    Obrigado Felipe!

    Um abraço,

    Luis Costa

    Tuesday, May 15, 2012 11:31 AM
  • "Os nomes dos dados correspondem com os dados do workbook que enviei na resposta anterior."

    Ué, não estou encontrando mais o link que tem a Pasta de Trabalho da outra resposta. Você apagou?


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    Wednesday, May 16, 2012 1:15 AM
    Moderator
  • Sim tinha apagado, pensei que ja tinha baixado o documento.

    http://www.yousendit.com/download/QlVqTkF0RkUzeUp2Zk1UQw

    Luis Costa

    Wednesday, May 16, 2012 8:50 AM
  • Precisava mesmo de ajuda neste....:(
    Wednesday, May 23, 2012 2:21 PM
  • Luís,

    Estou recebendo a mensagem "Sorry, this file has expired and cannot be downloaded." no link que você enviou.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    Wednesday, May 23, 2012 10:44 PM
    Moderator
  • Aqui vão os links

    https://www.yousendit.com/download/QlVqRFFSZ1BubVdVbDhUQw - para Workbook de registo

    https://www.yousendit.com/download/QlVqRFFSZ1BmVGF4djlVag - para modelo que tenho duvidas - Modelo Excel.xltm

    Obrigado,

    Luis Costa

    Thursday, May 24, 2012 5:46 PM
  • Sobre o modelo que você tem dúvidas, que possui 4 colunas. Escreva aqui um exemplo de como ficaria uma linha preenchida, cada um dos campos, pois estou tendo dificuldades de entender o que é Obra No, Ref Interna, Total Libras e Cliente Local.

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    Saturday, May 26, 2012 7:11 PM
    Moderator
  • Olá Felipe,

    Obrigado,

    Vou enviar os seguintes exemplos:

    Orçamento 1

    Orçamento 2

    Orçamento 3

    Registo de Orçamentos

    https://www.yousendit.com/download/QlVpU2VucHY4NVd4djhUQw

    Qualquer duvida Felipe contacte novamente.

    O objetivo da pasta de trabalho Registo de Orçamentos.xlsx, é para ficar com um registo do total de orçamentos por Cliente com o preço Total,  sendo os orçamentos criados a partir do Modelo Excel, e  enviados para o Cliente.

    Um abraço,

    E mais uma vez obrigado pelo apoio.

    Monday, May 28, 2012 3:03 PM
  • Olé Felipe,

    Está tendo alguma duvida nos arquivos que eu enviei?

    Obrigado,

    Luis Costa

    Thursday, May 31, 2012 9:26 AM
  • Olá, desculpe a demora, estive bastante ocupado esses dias.

    O exemplo que posto aqui é válido para o Excel 2007/2010: https://skydrive.live.com/redir?resid=FB206A2D510E0661!389

    Descompacte o arquivo e abra o suplemento. Há um botão que aparecerá no Ribbon chamado Registrar. Abra um dos orçamentos e execute ele. No entanto, antes de executar, altere o caminho mostrado no código abaixo do banco de dados que está dentro do arquivo compactado.

    Sub RibbonCallBack(control As IRibbonControl)
        Dim sCaminho As String
        Dim sObra As String
        Dim sRefInterna As String
        Dim sTotal As String
        Dim sClienteLocal As String
        
        On Error Resume Next
        Debug.Print ActiveWorkbook.Sheets("Total Orcamento").Name
        If Err.Number > 0 Then
            MsgBox "Não foi possível localizar a Planilha 'Orcamento' na Pasta de Trabalhoa atual!", vbCritical
            Exit Sub
        End If
        On Error GoTo 0
        
        'Altere o caminho abaixo para o banco de dados
        sCaminho = "C:\Users\Felipe\Desktop\Luis Eduardo\Registro de Orçamentos.xlsx"
        
        With ActiveWorkbook.Sheets("Total Orcamento")
            sObra = .Range("C14")
            sRefInterna = .Range("K14")
            sTotal = .Range("H14")
            sClienteLocal = .Range("C12")
        End With
        
        'Numa instrução SQL, valores de texto devem ficar entre aspas simples
        'e valores numéricos devem ficar livres.
        SQL "INSERT INTO [Folha1$] " & _
          "VALUES (" & sObra & ", '" & sRefInterna & "', " & sTotal & ", '" & sClienteLocal & "')" _
          , sCaminho
    
        MsgBox "Informações inseridas com sucesso!", vbInformation
    
    End Sub
    
    Public Sub SQL(sSQL As String, sCaminho As String)
        'Essa rotina necessita que se adicione referência a Microsoft ActiveX Data Objects 2.0 ou superior
        
        Dim lng As Long
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        
        Set cn = New ADODB.Connection
        
        If Val(Application.Version) < 12 Then 'Para Excel 97-2003
            cn.ConnectionString = _
              "Provider=Microsoft.Jet.OLEDB.4.0;" & _
              "Data Source=" & sCaminho & ";" & _
              "Extended Properties=Excel 8.0;"
            cn.Open
        Else 'Para Excel 2007 ou 2010
            cn.ConnectionString = _
              "Provider=Microsoft.ACE.OLEDB.12.0;" & _
              "Data Source=" & sCaminho & ";" & _
              "Extended Properties=Excel 8.0"
            cn.Open
        End If
        
        cn.Execute sSQL
        
        cn.Close
    End Sub



    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    Sunday, June 03, 2012 1:01 PM
    Moderator
  • Olá Felipe!

    Muito Obrigado, é mesmo isto!

    Mas depois de funcionar no arquivo descompactado, utilizei o codigo no meu modelo de orçamento e dá o erro abaixo..Não percebo, o nº de campos é o mesmo...

    Que erro será?

    Mais uma vez obrigado Felipe!

    Abraço,

    Luis Costa

    Monday, June 04, 2012 2:59 PM
  • Você está usando o arquivo de banco de dados modelo que te enviei? Certifique-se que ele tem apenas 4 colunas, e o cabeçalho deles é exatamente igual ao que te mandei.

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    Tuesday, June 05, 2012 1:00 AM
    Moderator