- Tham gia
- 13/6/06
- Bài viết
- 4,751
- Được thích
- 10,259
- Giới tính
- Nam
- Nghề nghiệp
- Giáo viên, CEO tại Bluesofts
Microsoft Excel Desktop là phần mềm bảng tính rất mạnh mẽ chạy trên nền tảng Windows và Macbook, cho phép lập trình thông qua các đối tượng COM bằng các ngôn ngữ lập trình trên Windows như VBA, VB6, Delphi, C#, VB.NET, C++,.... Nhiều năm qua thế giới đã lập trình ra rất nhiều phần mềm to, nhỏ trên Excel. Về bảng tính online Microsoft cung cấp Excel Online (chạy trên trình duyệt web) lưu trên OneDrive và Excel365 (chạy trên Windows) đồng bộ lên OneDrive. Lợi ích của Excel 365 là vẫn cho phép lập trình VBA với điều kiện phải mở file ra. Google cung cấp Google Sheets mở trên trình duyệt web và lưu trên Google Drive. Về lập trình thì Excel Online dùng JavaScript hoặc TypeScript để lập trình, Google Sheets thì dùng JavaScript. Phần mềm lập trình trên nền tảng Windows sử dụng các hệ sinh thái Windows. Ví dụ kết nối dữ liệu như SQL Server, MySQL, MS Access, MS Excel, các giao diện nhập liệu với Windows Form,... Trên web thì hệ sinh thái để lập trình cùng ứng dụng nó khác. Bạn đã có một phần mềm Excel VBA bây giờ muốn đồng bộ dữ liệu lên cloud (cụ thể là lưu trên drive) nếu lập trình lại bằng JavaScript chạy trên nền tảng web sẽ rất khó khăn, trừ ứng dụng siêu nhỏ, nếu cố làm được bạn phải dành rất nhiều thời gian, có thể nhiều năm để làm lại một phần mềm trên Excel Online hoặc Google Sheets. Bản thân tôi đã có phần mềm kế toán A-Excel mất vài năm mới làm được trên Excel VBA nếu bây giờ tôi làm lại y như vậy trên Google Sheets hay Excel Online với tôi là không thể.
Với nhu cầu từ các phần mềm to, nhỏ trên Excel VBA hay một ngôn ngữ khác đã có muốn đồng bộ toàn bộ hay một phần dữ liệu lên Google Sheets, Excel Online (từ nay gọi là bảng tính online), vẫn bằng ngôn ngữ lập trình VBA, VB6, Delphi, C#, VB.NET, C++, tên các thủ tục gọi lệnh, tên thuộc tính các đối tượng gần như giống hệt Excel, code VBA cũ của bạn chỉ thay đổi vài khai báo ban đầu, kiểm tra kết nối, còn lại gần như giữ nguyên. Tôi tạo ra các class trong thư viện AddinATools.dll để thực hiện được việc này.
Trong bài viết này tôi sẽ trình bày chi tiết cách thức lập trình VBA để cập nhật dữ liệu và định dạng lên Google Sheets, Excel Online, cách lập trình với các tập tin trên Google Drive, OneDrive, DrobBox. Một code chạy trên đa nền tảng. "Base code for all platforms".
Bài đầu tiên mời các bạn xem video hướng dẫn cũng như giới thiệu giải pháp này.
(Xem Phần 01: Hướng dẫn lập trình cho Google Sheets và Excel Online giống như Excel VBA)
Để thực hành các code trong chủ đề này bạn cần thực hiện các yêu cầu về thư viện:
1. Cài đặt Add-in A-Tools v10 (2024) Pro, bản cập nhật tối thiểu ngày 27-11-2024. Download
2. Nhúng thư viện lập trình vào dự án VBA
Trong môi trường VBA, vào menu Tools - > References... check mục "AddinATools.dll"
Bây giờ bạn đã đủ điều kiện về môi trường và các thành phần thư viện tối thiểu để lập trình cùng tôi trong chủ đề này.
Để lập trình với bảng tính online cũng như các dịch vụ lưu trữ đám mây với thư viện Add-in A-Tools cần tuân thủ code cấu trúc code như sau:
(Toàn bộ code trong chủ đề này tôi dùng mẫu format code của diễn đàn là C# để định dạng, do không tìm được mẫu tương đồng. Mã nguồn lập trình là VBA các bạn nhé.)
Cấu trúc code
Ở code trên, chúng ta làm việc với dịch vụ cloud nào thì khai báo loại đó:
ctGoogleDrive - Làm việc với Google Drive/Google Sheets
ctOneDrive - Làm việc với OneDrive/Excel Online
ctDropBox - Làm việc với DropBox.
Hàm OpenAuthor() cho phép bạn đăng nhập tài khoản cloud của bạn và phê duyệt quyền truy cập cho thư viện làm việc. Bạn có thể mở trên form hoặc trên Website tùy vào tham số bạn nhập vào trong hàm.
Màn hình đăng nhập là của các nhà cung cấp dịch vụ đám mây cung cấp, không phải do A-Tools tạo ra.
Xem toàn bộ các tập tin và các sheet trên cloud bạn đang mở
Trên đầu Module tôi khai báo hai hằng số về FileID và loại Cloud. Các ví dụ bài viết này sẽ dùng hai hằng số này, nếu bạn muốn làm việc với dịch vụ cloud nào, với tập tin nào chỉ cần sửa hai hằng số này.
Trong ví dụ trên tôi khai báo biến đối tượng để điều khiển bảng tính online:
Dim MyCloud As New BSCloud 'Điều khiển dịch vụ cloud
Dim Wb As BSCloudWorkbook 'Trong Excel là Excel.Workbook - Điều khiển tập tin
Dim Sh As BSCloudWorksheet 'Trong Excel là Excel.Worksheet - Điều khiển bảng tính
Các khai báo trên là đầu mối quan trọng để truy cập vào các thành phần của bảng tính online sau này.
Tập tin mã nguồn các vị dụ trong chủ đề này
Toàn bộ mã nguồn trình bày trong chủ đề này có trong tập tin theo địa chỉ dưới đây (các bạn cài Add-in A-Tools là có).
(*) Mã nguồn ví dụ trong bộ cài: "C:\A-Tools\HELP & DEMOS\A-Tools VBA Programming\Cloud\Write data to GoogleSheets_ExcelOnline.xlsm"
Còn tiếp....
Với nhu cầu từ các phần mềm to, nhỏ trên Excel VBA hay một ngôn ngữ khác đã có muốn đồng bộ toàn bộ hay một phần dữ liệu lên Google Sheets, Excel Online (từ nay gọi là bảng tính online), vẫn bằng ngôn ngữ lập trình VBA, VB6, Delphi, C#, VB.NET, C++, tên các thủ tục gọi lệnh, tên thuộc tính các đối tượng gần như giống hệt Excel, code VBA cũ của bạn chỉ thay đổi vài khai báo ban đầu, kiểm tra kết nối, còn lại gần như giữ nguyên. Tôi tạo ra các class trong thư viện AddinATools.dll để thực hiện được việc này.
Trong bài viết này tôi sẽ trình bày chi tiết cách thức lập trình VBA để cập nhật dữ liệu và định dạng lên Google Sheets, Excel Online, cách lập trình với các tập tin trên Google Drive, OneDrive, DrobBox. Một code chạy trên đa nền tảng. "Base code for all platforms".
Bài đầu tiên mời các bạn xem video hướng dẫn cũng như giới thiệu giải pháp này.
Để thực hành các code trong chủ đề này bạn cần thực hiện các yêu cầu về thư viện:
1. Cài đặt Add-in A-Tools v10 (2024) Pro, bản cập nhật tối thiểu ngày 27-11-2024. Download
2. Nhúng thư viện lập trình vào dự án VBA
Trong môi trường VBA, vào menu Tools - > References... check mục "AddinATools.dll"
Bây giờ bạn đã đủ điều kiện về môi trường và các thành phần thư viện tối thiểu để lập trình cùng tôi trong chủ đề này.
Để lập trình với bảng tính online cũng như các dịch vụ lưu trữ đám mây với thư viện Add-in A-Tools cần tuân thủ code cấu trúc code như sau:
(Toàn bộ code trong chủ đề này tôi dùng mẫu format code của diễn đàn là C# để định dạng, do không tìm được mẫu tương đồng. Mã nguồn lập trình là VBA các bạn nhé.)
Cấu trúc code
C#:
Sub GoogleSheet_CheckConnection()
Dim MyCloud As New BSCloud
On Error GoTo lbEnd
If Not MyCloud.Connected(ctGoogleDrive) Then
If Not MyCloud.OpenAuthor(Application, ctGoogleDrive, Application.Hwnd) Then
MsgBox "Can not connect to drive.", vbCritical
GoTo lbEnd
End If
End If
MsgBox "Connection successful!", vbInformation
'The following commands update data and format
lbEnd:
If Err <> 0 Then
Debug.Print "Error: " & Err.Description
End If
Set MyCloud = Nothing
End Sub
Ở code trên, chúng ta làm việc với dịch vụ cloud nào thì khai báo loại đó:
ctGoogleDrive - Làm việc với Google Drive/Google Sheets
ctOneDrive - Làm việc với OneDrive/Excel Online
ctDropBox - Làm việc với DropBox.
Hàm OpenAuthor() cho phép bạn đăng nhập tài khoản cloud của bạn và phê duyệt quyền truy cập cho thư viện làm việc. Bạn có thể mở trên form hoặc trên Website tùy vào tham số bạn nhập vào trong hàm.
Màn hình đăng nhập là của các nhà cung cấp dịch vụ đám mây cung cấp, không phải do A-Tools tạo ra.
Xem toàn bộ các tập tin và các sheet trên cloud bạn đang mở
Trên đầu Module tôi khai báo hai hằng số về FileID và loại Cloud. Các ví dụ bài viết này sẽ dùng hai hằng số này, nếu bạn muốn làm việc với dịch vụ cloud nào, với tập tin nào chỉ cần sửa hai hằng số này.
C#:
Private Const FileID = "https://docs.google.com/spreadsheets/d/1-o__30yfKSTRAB3vrqEo6fCnMQSXHEN8ImtE4hca4CA/edit?gid=401030668#gid=401030668"
Private Const MyCloudType = ctGoogleDrive
C#:
Sub GoogleSheet_ViewStruct()
Dim MyCloud As New BSCloud
Dim Wb As BSCloudWorkbook, Sh As BSCloudWorksheet
On Error GoTo lbEnd
If Not MyCloud.Connected(MyCloudType) Then
If Not MyCloud.OpenAuthor(Application, MyCloudType, Application.Hwnd) Then
Exit Sub
End If
End If
MyCloud.Workbooks.Open FileID, True 'Mở tập tin từ drive
For Each Wb In MyCloud.Workbooks 'Duyệt từng tập tin đã mở
Debug.Print Wb.Name, "File_ID: " & Wb.ID
For Each Sh In Wb.Sheets 'Duyệt từng sheet trong tập tin - Workbook
Debug.Print vbTab & Sh.Name, Sh.ID
Next Sh
Next Wb
lbEnd:
If Err <> 0 Then
Debug.Print "Error: " & Err.Description
End If
Set Sh = Nothing
Set Wb = Nothing
Set MyCloud = Nothing
End Sub
Trong ví dụ trên tôi khai báo biến đối tượng để điều khiển bảng tính online:
Dim MyCloud As New BSCloud 'Điều khiển dịch vụ cloud
Dim Wb As BSCloudWorkbook 'Trong Excel là Excel.Workbook - Điều khiển tập tin
Dim Sh As BSCloudWorksheet 'Trong Excel là Excel.Worksheet - Điều khiển bảng tính
Các khai báo trên là đầu mối quan trọng để truy cập vào các thành phần của bảng tính online sau này.
Tập tin mã nguồn các vị dụ trong chủ đề này
Toàn bộ mã nguồn trình bày trong chủ đề này có trong tập tin theo địa chỉ dưới đây (các bạn cài Add-in A-Tools là có).
(*) Mã nguồn ví dụ trong bộ cài: "C:\A-Tools\HELP & DEMOS\A-Tools VBA Programming\Cloud\Write data to GoogleSheets_ExcelOnline.xlsm"
Còn tiếp....
Lần chỉnh sửa cuối: