▷ 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!


6 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

  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

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

    Responder

Deixe uma resposta

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