Share source code VBA client/server sử dụng thư viện wsoc32.dll trên excel 64bit

Liên hệ QC

ban0955

Thành viên mới
Tham gia
29/11/11
Bài viết
4
Được thích
15
Xin chào các bạn.
Mình là newbie
Sau 1 thời gian tìm hiểu cách thức tạo ứng dụng client/server trên excel 64 bit nhưng không thấy nơi nào có source.
Thấy có nhiều bạn cũng đang tìm vấn đề giống mình nên mình post thành quả của mình lên đây.

2 file này mình dựa trên source VB trên mạng và sửa lại thành VBA.
Chỉ hoạt động trên Excel 64 bit

Trong quá trình chạy server nếu gặp lỗi 10022 thì các bạn chạy Excel Run As Administrator nha.
Mình thấy việc tạo ứng dụng client/server trên VBA7 cũng hoàn toàn khả thi nên tìm hiểu thử, bài chỉ dành cho các Newbie giống mình, hy vọng sẽ giúp các bạn bước đầu tiên để phát triển ứng dụng client/server cho riêng mình, mong các cao thủ không chê bai.
Mời các bạn xem file bên dưới.
Mình đã test trên 1 máy tính và nhiều máy trong mạng LAN.
 

File đính kèm

  • ClientVB.xlsb
    62.8 KB · Đọc: 40
  • ServerVB.xlsb
    46.7 KB · Đọc: 48
Xin chào các bạn.
Mình là newbie
Sau 1 thời gian tìm hiểu cách thức tạo ứng dụng client/server trên excel 64 bit nhưng không thấy nơi nào có source.
Thấy có nhiều bạn cũng đang tìm vấn đề giống mình nên mình post thành quả của mình lên đây.

2 file này mình dựa trên source VB trên mạng và sửa lại thành VBA.
Chỉ hoạt động trên Excel 64 bit

Trong quá trình chạy server nếu gặp lỗi 10022 thì các bạn chạy Excel Run As Administrator nha.
Mình thấy việc tạo ứng dụng client/server trên VBA7 cũng hoàn toàn khả thi nên tìm hiểu thử, bài chỉ dành cho các Newbie giống mình, hy vọng sẽ giúp các bạn bước đầu tiên để phát triển ứng dụng client/server cho riêng mình, mong các cao thủ không chê bai.
Mời các bạn xem file bên dưới.
Mình đã test trên 1 máy tính và nhiều máy trong mạng LAN.
Các vị tiền bối cho em hỏi chút ạ.
2 file trên của em chạy bình thường thì không lỗi.
nhưng chạy ở chế độ debug thì excel tự khởi động lại hoài.
Các bác tiền bối xem chỉ dùm em để không bị lỗi trên nữa em cám ơn ạ.
 
Upvote 0
Các vị tiền bối cho em hỏi chút ạ.
2 file trên của em chạy bình thường thì không lỗi.
nhưng chạy ở chế độ debug thì excel tự khởi động lại hoài.
Các bác tiền bối xem chỉ dùm em để không bị lỗi trên nữa em cám ơn ạ.
Update lại phiên bản server + client đã hoạt động trơn tru, không lỗi, kết hợp hiễn thị tiếng việt.

Em hỏi thêm chút xíu, thấy box này hơi nhạt. Em đăng bài không có ai trả lời em hết.
Admin xem giúp em nếu đã có box tương tự rồi thì cho em xin link để qua đó thảo luận ạ.
Một mình mò mẫm nó lâu quá :D

Em có mong muốn dùng excel để tạo ra một ứng dụng client-server, hoặc share dữ liệu cho nhiều người dùng 1 lúc mà không cần cài thêm bất kỳ Add-in nào, chỉ sử dụng windows API và VBA mà thôi.
 

File đính kèm

  • ClientVB.xlsb
    89.3 KB · Đọc: 24
  • ServerVBA-V3.xlsb
    112.4 KB · Đọc: 27
Upvote 0
bác nên dùng google sheet, chia sẻ data tiện lợi vô cùng !
 
Upvote 0
Đánh dấu bài viết này để em xem sau đã, hiện tại kiến thức của em chưa tới để hiểu hết code, cần thời gian tìm hiểu thêm khi nào có thêm chút ít quay lại đây xem tiếp
 
Upvote 0
Tò mò tôi dòm qua thì thấy..

1/ thay vì rảnh mò cái mớ API lỗi thời đó thì chuyển qua mò mớ API sau

Mã:
Private Declare Function WSACleanup Lib "ws2_32.dll" () As Long
Private Declare Function API_Socket Lib "ws2_32.dll" Alias "socket" (ByVal af As Long, ByVal stype As Long, ByVal Protocol As Long) As Long
Private Declare Function API_CloseSocket Lib "ws2_32.dll" Alias "closesocket" (ByVal s As Long) As Long
Private Declare Function API_Connect Lib "ws2_32.dll" Alias "connect" (ByVal s As Long, ByRef name As sockaddr, ByVal namelen As Long) As Long
Private Declare Function API_Disconnect Lib "mswsock.dll" Alias "DisconnectEx" (ByVal hSocket As Long, ByVal lpOverlapped As Long, ByVal dwFlags As Long) As Long
Private Declare Function API_GetAddrInfo Lib "ws2_32.dll" Alias "getaddrinfo" (ByVal NodeName As String, ByVal ServName As String, ByVal lpHints As Long, lpResult As Long) As Long
Private Declare Function API_FreeAddrInfo Lib "ws2_32.dll" Alias "freeaddrinfo" (ByVal res As Long) As Long
Private Declare Function API_Send Lib "ws2_32.dll" Alias "send" (ByVal s As Long, ByRef buf As Byte, ByVal datalen As Long, ByVal Flags As Long) As Long
Private Declare Function API_SendTo Lib "ws2_32.dll" Alias "sendto" (ByVal s As Long, ByRef buf As Byte, ByVal datalen As Long, ByVal Flags As Long, ByRef toaddr As sockaddr, ByVal tolen As Long) As Long
Private Declare Function API_Bind Lib "ws2_32.dll" Alias "bind" (ByVal s As Long, ByRef name As sockaddr, ByRef namelen As Long) As Long
Private Declare Function API_Listen Lib "ws2_32.dll" Alias "listen" (ByVal s As Long, ByVal backlog As Long) As Long
Private Declare Function API_Accept Lib "ws2_32.dll" Alias "accept" (ByVal s As Long, ByRef addr As sockaddr, ByRef addrlen As Long) As Long
Private Declare Function API_GetSockOpt Lib "ws2_32.dll" Alias "getsockopt" (ByVal s As Long, ByVal level As Long, ByVal optname As Long, optval As Any, optlen As Long) As Long
Private Declare Function API_SetSockOpt Lib "ws2_32.dll" Alias "setsockopt" (ByVal s As Long, ByVal level As Long, ByVal optname As Long, optval As Any, ByVal optlen As Long) As Long
Private Declare Function API_GetPeerName Lib "ws2_32.dll" Alias "getpeername" (ByVal s As Long, ByRef name As sockaddr, ByRef namelen As Long) As Long
Private Declare Function API_GetSockName Lib "ws2_32.dll" Alias "getsockname" (ByVal s As Long, ByRef name As sockaddr, ByRef namelen As Long) As Long
Private Declare Function API_GetHostName Lib "ws2_32.dll" Alias "gethostname" (ByVal host_name As String, ByVal namelen As Long) As Long
Private Declare Function API_IoctlSocket Lib "ws2_32.dll" Alias "ioctlsocket" (ByVal s As Long, ByVal cmd As Long, ByRef argp As Long) As Long
Private Declare Function API_Recv Lib "ws2_32.dll" Alias "recv" (ByVal s As Long, ByRef buf As Byte, ByVal datalen As Long, ByVal Flags As Long) As Long
Private Declare Function API_RecvFrom Lib "ws2_32.dll" Alias "recvfrom" (ByVal s As Long, ByRef buf As Byte, ByVal datalen As Long, ByVal Flags As Long, ByRef fromaddr As sockaddr, ByRef fromlen As Long) As Long

Private Declare Function inet_ntop Lib "ws2_32.dll" (ByVal af As Long, ByRef ppAddr As Any, ByRef pStringBuf As Any, ByVal StringBufSize As Long) As Long
Private Declare Function inet_ntoa Lib "ws2_32.dll" (ByVal iaddr As Long) As Long
Private Declare Function ntohs Lib "ws2_32.dll" (ByVal netshort As Long) As Integer

2/ thay vì mãi mê API và khai báo như mớ rau trộn kia thì bỏ đi cho khỏe

3/ nếu bỏ mục số 2 thì chuyển qua C#, Python họ viết cho các thư viện các hàm có sẳn còn ta chi khai báo và liên kết nó lại ...

4/ thay vì viết cái Server.xlsb thì viết nó sang Server.Exe

5/ thay vì xu hướng chung họ từng bước bỏ API của Ms đi thì mình đi siêu tầm và viết cho lắm vào ... nhưng nhiều thứ trong đó không hiểu gì cả

sẽ mất quá nhiều thời gian, công sức và trên VBA khai báo quá nhiều API thì làm cho Excel nó chạy chậm lại + phát sinh lỗi ( Excel ngu càng ngu ra như tôi đã từng nói đâu đó = code rác )

6/ từng bước bỏ dần VBA đi nếu không muốn tù túng và viết thuận tiện hơn khi viết trên các ngôn ngữ khác ngoài VBA

7/ Ví dụ thôi khi viết trên Delphi các kỹ sư của Delphi khai báo cho hết các hằng + hàm ( 32 và 64 bit) còn ta chi việc viết tên Hàm LoadLibrary vào là xong

Mã:
ModuleHandle := LoadLibrary(PChar(DLLName));

code API rác rơi vãi đâu đó làm sao khai báo chính xác và đầy đủ = các kỹ sư Delphi viết được

8/ chốt lại khả năng không tự viết được nên mới cố viết cho lắm API ... nếu cố thì nên viết trên C#, Delphi, Python ... thì sẽ tốt hơn lắm lắm trên VBA

9/ VBA được viết cùng thời điểm với VB6 và cả 2 có nhiều hàm lỗi thời trong 20 năm qua chưa viết mới lại

10/ VBA không được thiết kế để xử lý dữ liệu và Array lớn ... nếu lớn là văng hoặc đơ

vài dòng khuyên vậy và tham khảo nên hay không thì tùy
 
Upvote 0
Tò mò tôi dòm qua thì thấy..

1/ thay vì rảnh mò cái mớ API lỗi thời đó thì chuyển qua mò mớ API sau

Mã:
Private Declare Function WSACleanup Lib "ws2_32.dll" () As Long
Private Declare Function API_Socket Lib "ws2_32.dll" Alias "socket" (ByVal af As Long, ByVal stype As Long, ByVal Protocol As Long) As Long
Private Declare Function API_CloseSocket Lib "ws2_32.dll" Alias "closesocket" (ByVal s As Long) As Long
Private Declare Function API_Connect Lib "ws2_32.dll" Alias "connect" (ByVal s As Long, ByRef name As sockaddr, ByVal namelen As Long) As Long
Private Declare Function API_Disconnect Lib "mswsock.dll" Alias "DisconnectEx" (ByVal hSocket As Long, ByVal lpOverlapped As Long, ByVal dwFlags As Long) As Long
Private Declare Function API_GetAddrInfo Lib "ws2_32.dll" Alias "getaddrinfo" (ByVal NodeName As String, ByVal ServName As String, ByVal lpHints As Long, lpResult As Long) As Long
Private Declare Function API_FreeAddrInfo Lib "ws2_32.dll" Alias "freeaddrinfo" (ByVal res As Long) As Long
Private Declare Function API_Send Lib "ws2_32.dll" Alias "send" (ByVal s As Long, ByRef buf As Byte, ByVal datalen As Long, ByVal Flags As Long) As Long
Private Declare Function API_SendTo Lib "ws2_32.dll" Alias "sendto" (ByVal s As Long, ByRef buf As Byte, ByVal datalen As Long, ByVal Flags As Long, ByRef toaddr As sockaddr, ByVal tolen As Long) As Long
Private Declare Function API_Bind Lib "ws2_32.dll" Alias "bind" (ByVal s As Long, ByRef name As sockaddr, ByRef namelen As Long) As Long
Private Declare Function API_Listen Lib "ws2_32.dll" Alias "listen" (ByVal s As Long, ByVal backlog As Long) As Long
Private Declare Function API_Accept Lib "ws2_32.dll" Alias "accept" (ByVal s As Long, ByRef addr As sockaddr, ByRef addrlen As Long) As Long
Private Declare Function API_GetSockOpt Lib "ws2_32.dll" Alias "getsockopt" (ByVal s As Long, ByVal level As Long, ByVal optname As Long, optval As Any, optlen As Long) As Long
Private Declare Function API_SetSockOpt Lib "ws2_32.dll" Alias "setsockopt" (ByVal s As Long, ByVal level As Long, ByVal optname As Long, optval As Any, ByVal optlen As Long) As Long
Private Declare Function API_GetPeerName Lib "ws2_32.dll" Alias "getpeername" (ByVal s As Long, ByRef name As sockaddr, ByRef namelen As Long) As Long
Private Declare Function API_GetSockName Lib "ws2_32.dll" Alias "getsockname" (ByVal s As Long, ByRef name As sockaddr, ByRef namelen As Long) As Long
Private Declare Function API_GetHostName Lib "ws2_32.dll" Alias "gethostname" (ByVal host_name As String, ByVal namelen As Long) As Long
Private Declare Function API_IoctlSocket Lib "ws2_32.dll" Alias "ioctlsocket" (ByVal s As Long, ByVal cmd As Long, ByRef argp As Long) As Long
Private Declare Function API_Recv Lib "ws2_32.dll" Alias "recv" (ByVal s As Long, ByRef buf As Byte, ByVal datalen As Long, ByVal Flags As Long) As Long
Private Declare Function API_RecvFrom Lib "ws2_32.dll" Alias "recvfrom" (ByVal s As Long, ByRef buf As Byte, ByVal datalen As Long, ByVal Flags As Long, ByRef fromaddr As sockaddr, ByRef fromlen As Long) As Long

Private Declare Function inet_ntop Lib "ws2_32.dll" (ByVal af As Long, ByRef ppAddr As Any, ByRef pStringBuf As Any, ByVal StringBufSize As Long) As Long
Private Declare Function inet_ntoa Lib "ws2_32.dll" (ByVal iaddr As Long) As Long
Private Declare Function ntohs Lib "ws2_32.dll" (ByVal netshort As Long) As Integer

2/ thay vì mãi mê API và khai báo như mớ rau trộn kia thì bỏ đi cho khỏe

3/ nếu bỏ mục số 2 thì chuyển qua C#, Python họ viết cho các thư viện các hàm có sẳn còn ta chi khai báo và liên kết nó lại ...

4/ thay vì viết cái Server.xlsb thì viết nó sang Server.Exe

5/ thay vì xu hướng chung họ từng bước bỏ API của Ms đi thì mình đi siêu tầm và viết cho lắm vào ... nhưng nhiều thứ trong đó không hiểu gì cả

sẽ mất quá nhiều thời gian, công sức và trên VBA khai báo quá nhiều API thì làm cho Excel nó chạy chậm lại + phát sinh lỗi ( Excel ngu càng ngu ra như tôi đã từng nói đâu đó = code rác )

6/ từng bước bỏ dần VBA đi nếu không muốn tù túng và viết thuận tiện hơn khi viết trên các ngôn ngữ khác ngoài VBA

7/ Ví dụ thôi khi viết trên Delphi các kỹ sư của Delphi khai báo cho hết các hằng + hàm ( 32 và 64 bit) còn ta chi việc viết tên Hàm LoadLibrary vào là xong

Mã:
ModuleHandle := LoadLibrary(PChar(DLLName));

code API rác rơi vãi đâu đó làm sao khai báo chính xác và đầy đủ = các kỹ sư Delphi viết được

8/ chốt lại khả năng không tự viết được nên mới cố viết cho lắm API ... nếu cố thì nên viết trên C#, Delphi, Python ... thì sẽ tốt hơn lắm lắm trên VBA

9/ VBA được viết cùng thời điểm với VB6 và cả 2 có nhiều hàm lỗi thời trong 20 năm qua chưa viết mới lại

10/ VBA không được thiết kế để xử lý dữ liệu và Array lớn ... nếu lớn là văng hoặc đơ

vài dòng khuyên vậy và tham khảo nên hay không thì tùy
Cám ơn bác đã cho lời khuyên
Đầu bài mình cũng nói mình là newbie, mình chỉ có kiến thức chút về VBA mà thôi, Delphi mình hoàn toàn không biết luôn :D
Nhưng cũng cảm ơn bác, nhờ vậy mình mới biết là mấy hàm API mà mình sưu tập nó lỗi thời lâu quá rồi.
Python thì mình mới ở level basic, tạo thư viện này nọ chắc phải mất năm sau. Nhưng cũng cố gắng theo lời khuyên của bác vậy.
 
Upvote 0
Cám ơn bác đã cho lời khuyên
Đầu bài mình cũng nói mình là newbie, mình chỉ có kiến thức chút về VBA mà thôi, Delphi mình hoàn toàn không biết luôn :D
Nhưng cũng cảm ơn bác, nhờ vậy mình mới biết là mấy hàm API mà mình sưu tập nó lỗi thời lâu quá rồi.
Python thì mình mới ở level basic, tạo thư viện này nọ chắc phải mất năm sau. Nhưng cũng cố gắng theo lời khuyên của bác vậy.
1/ Bởi vì tôi thấy bạn đang cố siêu tầm và tìm kiếm nhưng cái mà tôi đã tìm trong vài năm trước link sau

2/ VBA quá lỗi thời rồi nên từng bước tiếp cận các ngôn ngữ mới hiện đại hơn còn VBA chỉ xử lý dữ liệu ít và các hàm nhỏ lẻ vẫn phát huy tính siêu việt của nó còn xử lý dữ liệu và Array lớn là tịt

3/ Tiếp cận 1 ngôn ngữ mới không quá khó VD như Python tôi cho là học nhanh nhất vì nhiều thư viện họ viết cho còn ta mất $ và dùng nó .... hay C#

Delphi cũng rất dễ thôi không có gì ghê gớm cả mà chỉ có C/c++ là khó mút nhất :p

4/ VBA chỉ áp dụng nó call hàm từ các DLL khác là tốt và tự đông hóa các hàm xử lý nhỏ lẻ vẫn phát huy tính siêu việt của nó
 
Upvote 0
Xin chào các bạn.
Mình là newbie
Sau 1 thời gian tìm hiểu cách thức tạo ứng dụng client/server trên excel 64 bit nhưng không thấy nơi nào có source.
Thấy có nhiều bạn cũng đang tìm vấn đề giống mình nên mình post thành quả của mình lên đây.

2 file này mình dựa trên source VB trên mạng và sửa lại thành VBA.
Chỉ hoạt động trên Excel 64 bit

Trong quá trình chạy server nếu gặp lỗi 10022 thì các bạn chạy Excel Run As Administrator nha.
Mình thấy việc tạo ứng dụng client/server trên VBA7 cũng hoàn toàn khả thi nên tìm hiểu thử, bài chỉ dành cho các Newbie giống mình, hy vọng sẽ giúp các bạn bước đầu tiên để phát triển ứng dụng client/server cho riêng mình, mong các cao thủ không chê bai.
Mời các bạn xem file bên dưới.
Mình đã test trên 1 máy tính và nhiều máy trong mạng LAN.
Bạn làm được như vậy là quá giỏi rồi.
 
Upvote 0
Web KT
Back
Top Bottom