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!
Link permanente
me ajudou demais…. parabens
Link permanente
Excelente artigo! Me ajudou bastante. Parabéns
Link permanente
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
Link permanente
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
Link permanente
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.
Link permanente
Eu adicionei as bibliotecas, porém só em computadores com Access que está funcionando, os demais aparece erro de ISAM
Link permanente
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
Link permanente
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.
Link permanente
Infelizmente não irá funcionar, por ser uma restrição do vinculo do Access,
Espero ter ajudado,
Abraços
Prof. Baldini
Link permanente
Muito obrigado pelo conteúdo Mestre. Pessoas como você que nos inspiram a sempre continuar.
Link permanente
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!
Link permanente
Olá Paulo, ai você terá que adaptar o SELECT para puxar mais itens que você necessita,
Espero ter ajudado,
Abraços
Prof. Baldini