▷ Excel VBA com SharePoint

Olá pessoal! Sejam bem vindos ao meu novo artigo!

Será demonstrado neste artigo a conexão Ms Excel VBA e o SharePoint. Para funcionar o código abaixo devemos criar uma "lista" dentro do SharePoint, o que para o MS Access, seria a criação de uma tabela. Somente após criada esta lista que será necessário inserir, excluir, atualizar e consultar as informações.

Não será demonstrado neste artigo como criar uma "lista" no SharePoint, mas sim somente a sua conexão.

Consulta - SELECT

Sub SELECT_Registro_Sharepoint_SKU()
Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim mySQL As String

Set cnt = New ADODB.Connection
Set rst = New ADODB.Recordset

    mySQL = "SELECT * FROM [Produtos];"
    
    With cnt
        .ConnectionString = _
        "Provider = Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=https://sites.com/sites;LIST={endereco_da_tabela_no_SharePoint};"
        .Open
    End With
    
    rst.Open mySQL, cnt, adOpenDynamic, adLockOptimistic

    ThisWorkbook.Sheets(Sheet2.Name).Range("A2").CopyFromRecordset rst
    
    If CBool(rst.State And adStateOpen) = True Then rst.Close
    Set rst = Nothing
    If CBool(cnt.State And adStateOpen) = True Then cnt.Close
    Set cnt = Nothing

End Sub

No código acima de consulta, será necessário vincular uma célula no Excel, que neste exemplo foi a Célula "A2".

Inserção - INSERT

Sub AddNew_Registro_Sharepoint_SKU()
Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim mySQL As String

Set cnt = New ADODB.Connection
Set rst = New ADODB.Recordset

    mySQL = "SELECT * FROM [Produtos];"
    
    With cnt
        .ConnectionString = _
        "Provider = Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=https://site.com/sites;LIST={endereco_da_tabela_no_SharePoint};"
        .Open
    End With
    
    rst.Open mySQL, cnt, adOpenDynamic, adLockOptimistic
    
    rst.AddNew
        rst(1).Value = "DESCRICAO_BALDINI" 'Descricao
        rst(3).Value = 9999999  'SKU
        rst(4).Value = "Categoria Baldini"  'Categoria
        rst(5).Value = "Marca Baldini" 'Marca
        rst(6).Value = 9.99 'Peso Liquido
        rst(7).Value = 8.88 'Peso bruto
        rst(8).Value = 7.77 'M3
        rst(9).Value = 6.66 'PesoLiqPallet
        rst(10).Value = 5.55 'PesobruPallet
        rst(11).Value = 4 'Caixas_Pallet
        rst(12).Value = 3 'Custos
        rst(13).Value = 2 'Shelf_Life
        rst(14).Value = Environ("username")
        rst(15).Value = Now
    rst.Update
    
    If CBool(rst.State And adStateOpen) = True Then rst.Close
    Set rst = Nothing
    If CBool(cnt.State And adStateOpen) = True Then cnt.Close
    Set cnt = Nothing

End Sub

No código acima foi inserido vários dados sobre um produto, em um SKU
(Stock Keeping Unit - Unidade de Controle de Estoque ), sendo enviado para a Lista/Tabela no SharePoint.

Exclusão - DELETE

Sub DELET_Registro_Sharepoint_SKU()
Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim mySQL As String

Set cnt = New ADODB.Connection
Set rst = New ADODB.Recordset

    mySQL = "DELETE * FROM [Produtos];"
    
    With cnt
        .ConnectionString = _
        "Provider = Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=https://sites.com/sites;LIST={endereco_da_tabela_no_SharePoint};"
        .Open
    End With
    
    cnt.Execute mySQL, , adCmdText
    
    If CBool(rst.State And adStateOpen) = True Then rst.Close
    Set rst = Nothing
    If CBool(cnt.State And adStateOpen) = True Then cnt.Close
    Set cnt = Nothing

End Sub

No código acima, será excluido todos os registros da tabela "Produto", sendo que se deve utilizar as mesmas sintaxes SQL.

Atualização - UPDATE

Sub Update_Registro_Sharepoint_SKU()
Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim mySQL As String

Set cnt = New ADODB.Connection
Set rst = New ADODB.Recordset

    mySQL = "SELECT * FROM [Produtos] WHERE [SKU] = 9999999;"
    
    With cnt
        .ConnectionString = _
        "Provider = Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=https://sites.com/sites;LIST={endereco_da_tabela_no_SharePoint};"
        .Open
    End With
    
    rst.Open mySQL, cnt, adOpenDynamic, adLockOptimistic
        rst(1).Value = "DESCRICAO_BALDINI2" 'Descricao
        rst(4).Value = "Categoria Baldini2" 'Categoria
        rst(5).Value = "Marca Baldini2" 'Marca      
    rst.Update
    
    If CBool(rst.State And adStateOpen) = True Then rst.Close
    Set rst = Nothing
    If CBool(cnt.State And adStateOpen) = True Then cnt.Close
    Set cnt = Nothing

End Sub

A diferença deste código (UPDATE) para o INSERT, é que não deverá ser é inserido a linha com a instrução do "AddNew". Para atualizar o registro necessário deverá adicionar a cláusula do "WHERE" na consulta SQL.

O endereço da tabela terá um código próximo a esse "{6a2dc7d0-d9be-427a-b811-204d93013c83}", somente com essa chave da tabela é que é possível fazer todos os links com o SharePoint.

OBS: Infelizmente a conexão é bastante lenta para a inserção e a exclusão dos dados, entre o MS Excel e o SharePoint, não foi possível realizar um teste em uma intranet corporativa para verificar se aumenta a velocidade entre as conexões.

Espero que tenha gostado desse artigo!

Caso tenha alguma sugestão, poste aqui nos comentários.

Se gostou, curta e compartilhe este artigo para que todos saibam o que é possível fazer dentro do Excel.

E ja conhece o meu novo curso online de Excel?

Abraços a todos e até o próximo artigo!

Fabio BALDINI

Frase do Dia: "Primeiro eles te ignoram, depois riem de você, depois brigam, e então você vence." Autor: Mahatma Gandhi

OBS: Quero agradecer imensamente ao Grande Mestre e Amigão Alessandro Trovato pelas eternas revisões dos artigo para que sempre fique esmero. Obrigadão grande Mestre!


12 Comentários


  1. Uso esse código sem problemas em uma aplicação para criar item na lista do SP , porém qdo outras pessoas utilizam em seus computadores, o código trava no .Open
    Seria porque eu tenho o MS ACCESS e as outras pessoas não?
    O erro que dá refere-se à falta de ISAM instalado, ou algo assim.
    Existe alguma maneira de rodar sem o MS ACCESS?
    Obrigado

    Responder

    1. Olá Jonathas, acredito que você tenha que ativar nas máquinas onde não tenha o ACCESS as referencias de ADO para que o VBA se conecte,

      Abraços

      Responder

      1. No meu computador funciona corretamente pois tem Access, nos computadores sem Access dão o erro de falta de ISAM instalado, eu ativei a biblioteca “Microsoft ADO Ext. 6.0 for DDL and Security”, e mesmo assim continua o erro.

        Responder

      2. Eu adicionei as bibliotecas, porém só em computadores com Access que está funcionando, os demais aparece erro de ISAM

        Responder

  2. Olá Fabio, obrigado pelo retorno. Como faço isso? Eu tentei habilitar algumas referências, mas não sei quais são as necessárias. Outro problema que eu tenho é que essas referências parece que não ficam salvas. Desculpe pelas perguntas.. sou iniciante nesse assunto. Abraço

    Responder

    1. Opa … ficou muito bom o artigo!! Travei nessa mesma parte, não consigo fazer funcionar com usuários que não possuem o Access instalado.

      Responder

      1. Infelizmente não irá funcionar, por ser uma restrição do vinculo do Access,

        Espero ter ajudado,

        Abraços

        Prof. Baldini

        Responder

  3. Muito obrigado pelo conteúdo Mestre. Pessoas como você que nos inspiram a sempre continuar.

    Responder

  4. Fabio, antes de mais, muitos parabens e obrigado pela partilha de informação.

    Tenho uma dúvida em relação ao update de 1 item.
    No código está:
    Sub Update_Registro_Sharepoint_SKU()
    Dim cnt As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim mySQL As String

    Set cnt = New ADODB.Connection
    Set rst = New ADODB.Recordset

    mySQL = “SELECT * FROM [Produtos] WHERE [SKU] = 9999999;”

    Se eu quiser usar uma variável no [SKU]=variavel_db, como ficaria?

    Sub Update_Registro_Sharepoint_SKU()
    Dim cnt As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim mySQL As String

    Set cnt = New ADODB.Connection
    Set rst = New ADODB.Recordset

    variavel_db=cells(i,j)
    mySQL = “SELECT * FROM [Produtos] WHERE [SKU] = variavel_db;”

    Já tentei como está acima, e de outras formas, e não roda. Se colocar como no exemplo original, roda bem, mas preciso de associar uma variável.

    Muito obrigado.
    Abraço!

    Responder

    1. Olá Paulo, ai você terá que adaptar o SELECT para puxar mais itens que você necessita,

      Espero ter ajudado,

      Abraços

      Prof. Baldini

      Responder

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *