Hola a todos!
No es la primera vez que publico sobre ADO y todas las posibilidades que nos ofrece. Una de ellas y que ya mencioné en publicaciones anteriores es la de interactuar con listas de SharePoint.
Y es que con ADO podemos modificar, añadir y eliminar registros en nuestras listas de SP. En el post de hoy os voy a compartir código para poder eliminar registros de una lista según especificaciones.
Dado que ADO lo ejecutamos en VBA vamos a utilizar Excel.
Imaginad esta lista de SP, que vamos a llamar TABLA_PERSONAS y donde en el campo ESTUDIOS tenemos varios valores: FORMACION PROFESIONAL, ESTUDIOS SECUNDARIOS, DIPLOMADOS O LICENCIADOS:

pues bien, tenemos que eliminar todos aquellos registros que sean DIPLOMADOS o ESTUDIOS SECUNDARIOS. Esto, si decidimos utilizar ADO (porque podemos utilizar Automate), lo vamos a lograr ejecutando este código, recordad que tenéis que indicar el ID de la lista en el código:
Sub BORRAR_DATOS_SHAREPOINT()
Dim rst As ADODB.Recordset
Dim cnt As ADODB.Connection
Dim mySQL As String
Dim respuesta As VbMsgBoxResult
respuesta = MsgBox("¿Deseas eliminar los registros con estudios DIPLOMADOS o ESTUDIOS SECUNDARIOS?", _
vbYesNo + vbQuestion, _
"Confirmar borrado")
If respuesta = vbNo Then
Exit Sub
End If
On Error GoTo ManejoErrores
mySQL = "SELECT * FROM [BBDD];"
Set cnt = New ADODB.Connection
With cnt
.ConnectionString = _
"Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=https://b.sharepoint.com/sites/SIGNUM_GROUP/;LIST={Id de la lista};"
.Open
End With
Set rst = New ADODB.Recordset
rst.Open mySQL, cnt, adOpenKeyset, adLockOptimistic
Do While Not rst.EOF
If rst.Fields("ESTUDIOS").Value = "DIPLOMADOS" Or _
rst.Fields("ESTUDIOS").Value = "ESTUDIOS SECUNDARIOS" Then
rst.Delete
End If
rst.MoveNext
Loop
MsgBox "Registros eliminados correctamente.", vbInformation
CerrarTodo:
If Not rst Is Nothing Then
If rst.State = 1 Then rst.Close
End If
Set rst = Nothing
If Not cnt Is Nothing Then
If cnt.State = 1 Then cnt.Close
End If
Set cnt = Nothing
Exit Sub
ManejoErrores:
MsgBox "Ocurrió un error: " & Err.Description, vbCritical
Resume CerrarTodo
End Sub
No olvidéis activar las referencias para Active Data Object (ADO) en el editor de VBA.
Una vez que lo hemos ejecutado este es el resultado:

Y esto es todo, espero que sea de utilidad. A veces, tener esto preparado es más rápido que utilizar Automate, pero como todo, va a depender de cada circunstancia.
En otro momento os publico como hacerlo con Automate, aunque tenéis aquí publicaciones similares que podemos modificar para lograrlo con Automate.
