kiến thức [Excel VBA] Làm việc với SharePoint List

NguyenDang95

Senior Member
Xin chào mọi người. Hôm nay mình xin tiếp tục viết về một chủ đề khác liên quan đến VBA, đó chính là List. Với nhiều người dùng làm việc trong hệ sinh thái Microsoft 365 doanh nghiệp, List (Danh sách) là cách thức trình bày dữ liệu theo dạng bảng, gồm các cột (trường) và các dòng dữ liệu (ListItem), rất thuận tiện cho việc quản lý cũng như chia sẻ với người dùng khác. Excel cung cấp cho người dùng nhiều tiện ích để làm việc với List như sau:
  • Bảng (Table)​
  • Power Query​
Tuy nhiên, đôi khi trong một số trường hợp người dùng lại muốn chủ động thực hiện một số thao tác với List như cập nhật, xóa, truy vấn hoặc thêm dòng mới, như vậy trường hợp này VBA sẽ tỏ ra là công cụ hữu dụng. Với thư viện ADO, người dùng có thể dễ dàng thực hiện những thao tác kể trên bằng câu lệnh truy vấn SQL hoặc thông qua đối tượng Recordset của thư viện này.
Để làm việc với List, chúng ta cần nắm được những thông tin sau:
1. Database:
Đây chính là URL của SharePoint site chứa List.
Ví dụ: https://danghome-my.sharepoint.com/...nghome_onmicrosoft_com/_layouts/15/Lists.aspx, trong đó https://danghome-my.sharepoint.com/personal/nguyendang_danghome_onmicrosoft_com chính là URL mà người dùng cần tìm.
2. ListId:
Đây là mã Id của List, người dùng có thể tìm thấy mã Id của List bằng mở List trong tab mới của trình duyệt, nhấp chuột phải sau đó chọn "View page source", tại đây nhấn tổ hợp phím Ctrl+F để mở thanh tìm kiếm và gõ "ListId". ListId có dạng như sau:
1684940857830.png

Thật ra, người cũng cũng có thể chỉ định tên của List thay cho mã Id, tuy nhiên điều này chỉ thực hiện được khi người dùng không có List nào khác trùng tên.
3. IMEX:
Trong ConnectionString dùng để kết nối đến List,
Code:
Provider=Microsoft.ACE.OLEDB.16.0;WSS;IMEX=2;RetrieveIds=Yes;DATABASE=http://mysharepointsite.com/documents/;LIST={5999B8A0-0C2F-4D4D-9C5A-D7B146E49698};
người dùng sẽ thấy IMEX, gồm ba giá trị khả dụng sau:
  • 0: Đọc, cập nhật, xóa
  • 1: Chỉ đọc
  • 2: Ghi
Khi cần thực hiện hành động nào thì cần chỉ định đúng giá trị cho IMEX, nếu không thư viện ADO sẽ trả về lỗi "Field not updatable".
Những câu lệnh SQL tương ứng với những hành động với List:
  • SELECT ... FROM ...: Đọc
  • INSERT INTO ... VALUES ...: Ghi
  • UPDATE ... SET: Cập nhật
  • DELETE FROM ...: Xóa
Một ví dụ về việc sử dụng thư viện ADO trong VBA để làm việc với List:
Giả sử người dùng có một List tên là PhoneCallList với nội dung như sau:
1684941567671.png

Người dùng muốn xóa những dòng dữ liệu có Region là "1", như vậy macro VBA sẽ như sau:
Code:
Public Sub DeleteSharePointListItem()
    Const ListId As String = "{0a1c9cc5-b72a-4519-987c-1203409dd4a3}"
    Const SharePointSiteUrl As String = "https://danghome-my.sharepoint.com/personal/nguyendang_danghome_onmicrosoft_com"
    Dim objCnn As ADODB.Connection
    Dim objRs As ADODB.Recordset
    Set objCnn = New ADODB.Connection
    With objCnn
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.16.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=" & SharePointSiteUrl & ";LIST=" & ListId & ";"
        .Open
    End With
    Set objRs = New ADODB.Recordset
    On Error Resume Next
    objRs.Open "DELETE FROM PhoneCallList WHERE Region = 1;", objCnn, adOpenKeyset, adLockOptimistic
    If Err.Number <> 0 Then MsgBox Err.Description
    On Error GoTo 0
    If objRs.State = adStateOpen Then objRs.Close
    If objCnn.State = adStateOpen Then objCnn.Close
End Sub
Sau khi chạy xong macro, những dòng có Region là "1" đã bị xóa.
1684941972731.png

Lưu ý: Người dùng không thể sử dụng thư viện ADO trong VBA để thực hiện những hành động sau:
  • Thêm hoặc xóa tập tin đính kèm của ListItem.
  • Do thư viện ADO xem List như là cơ sở dữ liệu, cho nên nó chỉ có thể xử lý những trường có kiểu dữ liệu chuỗi hoặc số, không hỗ trợ những trường có kiểu dữ liệu đặc biệt như Location, Image, Currency, v.v.
 
Last edited:
Back
Top