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.

Curta esse artigo também no Linkedin.

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!


1 comentário

Deixe uma resposta

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