phuongnam366377
Thành viên thường trực




- Tham gia
- 25/10/19
- Bài viết
- 235
- Được thích
- 227
Quá trình viết và thử Máy chủ VBA phát hiện ra nhiều thứ nên Keo ChatGPT viết bài sau bàn luận cho vui 
Vì sao KHÔNG nên sử dụng Excel (VBA) làm máy chủ
Trong nhiều hệ thống nội bộ, đặc biệt là các công cụ phân tích dữ liệu, nhiều người có xu hướng tận dụng Excel + VBA để làm rất nhiều việc: tính toán, xử lý dữ liệu, thậm chí làm máy chủ (server) cho các ứng dụng khác kết nối vào.Điều này có thể hoạt động trong các thử nghiệm nhỏ. Tuy nhiên trong thực tế, Excel/VBA hoàn toàn không phù hợp để làm máy chủ. Nếu cố gắng sử dụng theo hướng này, hệ thống rất dễ gặp các vấn đề như treo máy, xung đột kết nối hoặc mất dịch vụ.
Bài viết này phân tích rõ lý do vì sao.
1. Excel có thể bị đóng bất cứ lúc nào
Excel là một ứng dụng desktop dành cho người dùng, không phải là một dịch vụ hệ thống.Điều này có nghĩa là:
- Người dùng có thể đóng Excel bất cứ lúc nào
- Excel có thể crash
- Excel có thể restart khi cập nhật
- Người dùng có thể vô tình tắt workbook chứa macro
Các máy khách kết nối tới server sẽ nhận lỗi:
Connection refused<br>Server not available<br>
Trong môi trường production, điều này là không thể chấp nhận.
2. VBA chỉ chạy một luồng (Single Thread)
VBA được thiết kế để tự động hóa Excel, không phải để xử lý nhiều kết nối đồng thời.Đặc điểm quan trọng của VBA:
- chỉ có 1 thread
- mọi code chạy trên UI thread của Excel
- khi nhiều client kết nối → Excel chậm dần
- nếu có xử lý nặng → Excel đơ hoàn toàn
- giao diện Excel không phản hồi
3. Mở nhiều file Excel dễ gây xung đột
Trong thực tế, người dùng thường mở nhiều workbook cùng lúc:Excel_File_1.xlsm<br>Excel_File_2.xlsm<br>Excel_File_3.xlsm<br>
Nếu mỗi file đều chứa code khởi động server, hệ thống có thể gặp các tình huống như:
- nhiều server cùng chạy
- xung đột port
- macro chạy trùng lặp
- khó kiểm soát trạng thái hệ thống
Port 9000 already in use<br>
Đây là vấn đề rất phổ biến khi cố gắng biến Excel thành một máy chủ.
4. Excel không được thiết kế để chạy 24/7
Một máy chủ thực sự cần:- chạy liên tục
- ổn định nhiều ngày hoặc nhiều tháng
- quản lý tài nguyên tốt
- dễ bị memory leak khi chạy lâu
- không có cơ chế quản lý dịch vụ
- không có hệ thống restart tự động
5. Excel phụ thuộc vào người dùng
Một máy chủ đúng nghĩa cần:- hoạt động độc lập
- không phụ thuộc người dùng đăng nhập
- không phụ thuộc giao diện
- người dùng
- giao diện GUI
- trạng thái workbook
Kiến trúc đúng: tách server ra khỏi Excel
Giải pháp tốt nhất là tách máy chủ thành một chương trình độc lập.Ví dụ kiến trúc:
Excel (Client)<br> │<br> │ RPC / TCP<br> ▼<br>RPCServer.exe<br> │<br> │ Plugin<br> ▼<br>Compute Engine (DLL)<br>
Trong mô hình này:
- Excel chỉ đóng vai trò client
- server chạy trong một chương trình riêng
- hệ thống ổn định và dễ quản lý hơn nhiều.
Hai lựa chọn tốt cho máy chủ
1. Server dạng EXE
RPCServer.exe<br>Ưu điểm:
- dễ debug
- dễ restart
- log rõ ràng
- triển khai đơn giản
2. Windows Service
RPCServerService.exe<br>Ưu điểm:
- chạy cùng Windows
- không phụ thuộc user login
- ổn định lâu dài
Vai trò đúng của Excel/VBA
Excel vẫn rất mạnh nếu dùng đúng mục đích.Excel nên dùng để:
- phân tích dữ liệu
- tính toán
- giao diện người dùng
- tự động hóa quy trình
Kết luận
Excel và VBA là những công cụ cực kỳ hữu ích cho tự động hóa và phân tích dữ liệu. Tuy nhiên chúng không được thiết kế để làm máy chủ.Việc sử dụng Excel làm server có thể dẫn tới:
- hệ thống không ổn định
- xung đột khi mở nhiều workbook
- treo Excel khi có nhiều kết nối
- dịch vụ bị ngắt khi người dùng đóng ứng dụng
- để Excel làm client
- xây dựng server riêng bằng EXE hoặc Windows Service

