Tạo QR Code bằng VBA sử dụng API của Google

Liên hệ QC

ngduychien

Thành viên chính thức
Tham gia
6/1/07
Bài viết
71
Được thích
45
Trong quá trình thiết kế AddIns phụ vụ nhu cầu của cá nhân, tôi có tìm kiếm và sử dụng ba hàm này để tạo QR Code. Chia sẻ cùng anh em trên group nhé.
Hàm lấy QR Code từ API
Mã:

Sub InsertQR()
Dim xHttp: Set xHttp = CreateObject("Microsoft.XMLHTTP")
Dim bStrm: Set bStrm = CreateObject("Adodb.Stream")
Dim Size: Size = 250 'dalam Pixels
Dim QR, Name, val
Dim Invalid: Invalid = "\/:*?" & """" & "<>|"
For Each val In Selection
Name = val.Value
For intChar = 1 To Len(Name)
If InStr(Invalid, LCase(Mid(Name, intChar, 1))) > 0 Then
MsgBox "The file: " & vbCrLf & """" & Name & """" & vbCrLf & vbCrLf & " is invalid!"
Exit Sub
End If
Next
QR = "http://chart.googleapis.com/chart?chs=" & Size & "x" & Size & "&cht=qr&chl=" & Name
xHttp.Open "GET", QR, False
xHttp.Send
With bStrm
.Type = 1 '//binary
.Open
.write xHttp.responseBody
.savetofile ThisWorkbook.Path & Application.PathSeparator & Name & ".png", 2 '//overwrite
.Close
End With
Next
End Sub
Hàm chèn QR Code tạo được vào Sheet đang mở
Mã:

Function ShowPic(PicFile As String) As String
Dim AC As Range
On Error GoTo Done
Set AC = Application.Caller
ActiveSheet.Shapes.AddPicture(ThisWorkbook.Path & Application.PathSeparator & PicFile, False, True, AC.Left, AC.Top, 30, 30).Name = "QR"
ShowPic = ""
Exit Function
Done:
ShowPic = "Error"
End Function

Mã:

Sub PutTheQR()
Dim val As String
val = ActiveCell.Offset(0, -1).Value
Do While val <> ""
ActiveCell.FormulaR1C1 = "=ShowPic(RC[-1])"
ActiveCell.ClearContents
ActiveCell.Offset(1, 0).Activate
val = ActiveCell.Offset(0, -1).Value
Loop
End Sub
 
Gởi HeSanbi,
Theo phản ảnh thì code của chính chủ đưa lên từ 5 năm trước, không phải của bạn hay của "đệ" bạn gì cả, vậy hãy giải thích nguồn của code (có bằng chứng) để khỏi gây tranh cãi.
 
Upvote 0
Nhờ thằng “Đệ” người Nhật viêt chỉ là nói vui đó mà các bác.
 
Upvote 0
Nhờ thằng “Đệ” người Nhật viêt chỉ là nói vui đó mà các bác.
Trong 1 bài mà tôi vừa xóa, bạn ấy đưa ra bằng chứng gì đó về bản quyền, mà đen thùi tôi không đọc được. Bằng chứng đó lại bị phủ nhận. Do đó tôi muốn có bằng chứng rõ ràng hơn.
Nếu của tác giả người Nhật thì phải ghi rõ nguồn, đó là quy định.
 
Upvote 0
Trong 1 bài mà tôi vừa xóa, bạn ấy đưa ra bằng chứng gì đó về bản quyền, mà đen thùi tôi không đọc được. Bằng chứng đó lại bị phủ nhận. Do đó tôi muốn có bằng chứng rõ ràng hơn.
Nếu của tác giả người Nhật thì phải ghi rõ nguồn, đó là quy định.
À cái đó không phải là bằng chứng bản quyền mà là nội dung cái giấy phép sử dụng code. Đại khái là được tự do sử dụng, chỉnh sửa, phân phối v.v.. Theo tôi đọc thì bạn Hesanbi không có nhận đó là code của mình, chỉ có cái là không ghi rõ nguồn gốc thôi. :)
 
Upvote 0
Lên sao hỏa con người còn làm được, mã VBA tạo barcode thôi thì có gì mà khó bạn

Xin lỗi các bạn mình quên chỉ dẫn:
Dưới đây là thư viện QRCodeLib của một anh Nhật Bản, ảnh dựa trên phát minh của công ty Denso Wave, nên mã được chia sẻ nguồn mở.
Dựa trên phát minh người khác là không được phép nói mình sở hữu nhé các bạn.

Mã duy nhất chỉ sử dụng VBA.

Tôi khuyên các bạn không nên sử dụng thư viện này bởi vì nó gây tốn kém và tiêu hao tài nguyên khi khởi động Excel.
Các bạn nên sử dụng API online rất dễ dàng, nhanh chóng và gọn lẹ hơn rất là nhiều.


Em đọc em hiểu là "đệ" là bác nói cho vui thôi, không có gì đáng để "xỉa" ở đây cả.
Nhưng mà bác quá đen :D

(Bác nào định bắt bẻ em (em đoán là sẽ có): em ghi rõ là "em hiểu" như thế nhé. Ý kiến cá nhân).
 
Upvote 0
Dưới đây là thư viện QRCodeLib của một anh Nhật Bản, ảnh dựa trên phát minh của công ty Denso Wave, nên mã được chia sẻ nguồn mở.
Dựa trên phát minh người khác là không được phép nói mình sở hữu nhé các bạn.
Bạn đưa ra, vậy chắc bạn đã phải kiểm nghiệm. Vậy bạn cho tôi hỏi: code có mã chuỗi tiếng Việt (unicode) không? Tôi không muốn tải về, nghiên cứu, để rồi đi đến kết luận là không phục vụ unicode. Như thế mất công lắm. Nếu phục vụ unicode thì xin bạn một tập tin ví dụ XLSM để tôi nhập tiếng Việt.
 
Upvote 0
Bạn đưa ra, vậy chắc bạn đã phải kiểm nghiệm. Vậy bạn cho tôi hỏi: code có mã chuỗi tiếng Việt (unicode) không? Tôi không muốn tải về, nghiên cứu, để rồi đi đến kết luận là không phục vụ unicode. Như thế mất công lắm. Nếu phục vụ unicode thì xin bạn một tập tin ví dụ XLSM để tôi nhập tiếng Việt.
Bài viết người ta có ghi rõ đó bác. Bộ ký tự có thể tự chỉ định.

tính năng​

  • Hỗ trợ chế độ số, chữ và số, byte 8 bit và ký tự Trung Quốc
  • Có thể tạo mã QR tách
  • Có thể lưu vào các tệp BMP, EMF, GIF, PNG, SVG, TIFF
  • Mã QR có thể được lấy dưới dạng đối tượng IPictureDisp
  • Bảng màu có thể được chỉ định
  • Bộ ký tự có thể được chỉ định
  • Mã QR có thể được lưu trong khay nhớ tạm
 
Upvote 0
Bài viết người ta có ghi rõ đó bác. Bộ ký tự có thể tự chỉ định.

tính năng​

  • Hỗ trợ chế độ số, chữ và số, byte 8 bit và ký tự Trung Quốc
  • Có thể tạo mã QR tách
  • Có thể lưu vào các tệp BMP, EMF, GIF, PNG, SVG, TIFF
  • Mã QR có thể được lấy dưới dạng đối tượng IPictureDisp
  • Bảng màu có thể được chỉ định
  • Bộ ký tự có thể được chỉ định
  • Mã QR có thể được lưu trong khay nhớ tạm
Bạn ạ, tôi đã nói là tôi không muốn tải về và nghiên cứu khi chưa biết rõ nó có phục vụ unicode hay không. Bạn đưa ra giải pháp vậy bạn đã phải kiểm nghiệm. Tôi chỉ hỏi: code có phục vụ unicode không? Tôi chỉ đợi câu trả lời Có hoặc Không. Bạn trả lời vòng vo để làm gì? Nếu Có thì phiền bạn đính kèm tập tin mà tôi chỉ cần nhập văn bản tiếng Việt, không phải sửa gì nữa, không phải lăn tăn gì cả. Nếu câu trả lời ngắn gọn Có / Không mà bạn cũng không làm được, hoặc nếu bạn không thể đính kèm tập tin vì bất cứ lý do gì, thì xin trả lời: "Rất tiếc nhưng tôi không giúp bạn được". Thế thôi.
 
Upvote 0
Bạn ạ, tôi đã nói là tôi không muốn tải về và nghiên cứu khi chưa biết rõ nó có phục vụ unicode hay không. Bạn đưa ra giải pháp vậy bạn đã phải kiểm nghiệm. Tôi chỉ hỏi: code có phục vụ unicode không? Tôi chỉ đợi câu trả lời Có hoặc Không. Bạn trả lời vòng vo để làm gì? Nếu Có thì phiền bạn đính kèm tập tin mà tôi chỉ cần nhập văn bản tiếng Việt, không phải sửa gì nữa, không phải lăn tăn gì cả. Nếu câu trả lời ngắn gọn Có / Không mà bạn cũng không làm được, hoặc nếu bạn không thể đính kèm tập tin vì bất cứ lý do gì, thì xin trả lời: "Rất tiếc nhưng tôi không giúp bạn được". Thế thôi.
Em thử thì có hỗ trợ Unicode anh nếu anh để charset là UTF-8 anh ạ. Dùng phần mềm quét QRCode vẫn ra tiếng Việt
1652416828863.png
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Chào các bác. Em xin có ý xíu. Liên quan đến vấn đề đọc và lưu mã QR. Hiện nay các máy đọc mã QR có kết nối với máy tính khá đắt( Loại máy di động), nếu như mình có thể làm 1 app cho điện thoại. Trong app đó chia màn hình làm 2 phần. Phần 1 là đọc mã QR và phần 2 là hiện nội dung mã QR. Sau khi đọc xong người dùng có thể lưu vào file Excel để phân tích. Bác nào có khả năng thì giúp em với, vì nhu cầu kiểm kê trong kho rất nhiều. Nếu em gửi bài sai mục thì nhờ ban quản trị xóa giúp em.
 
Upvote 0
Sau khi đọc xong người dùng có thể lưu vào file Excel để phân tích.
Bác nào có khả năng thì giúp em với, vì nhu cầu kiểm kê trong kho rất nhiều.

Ai lại đi làm với Excel chứ.
Ba cái này người ta làm trên Google Sheets ầm ầm từ lâu lắm rồi.
Giơ cái điện thoại lên, bấm 1 phát là dữ liệu chạy vào file Google Sheets.
 
Upvote 0
Cám ơn bạn. Tôi đã tải về và thử qua thì thấy code nhanh hơn code bài #4 khoảng 3 lần. Như thế là tốt hơn đáng kể.
Mới mày mò test thử 2 cái thư viện này bằng hình thức tạo mã QR cho danh sách 30 cái tên và lưu luôn xuống ổ đĩa.
Kết quả là Zxing vẫn nhanh hơn nhiều. Anh xem file đính kèm xem thử đoạn code chỉnh sửa tạm cho việc lưu xuống ổ đĩa có vấn đề gì không nhé (của Yas78).

(milisecond)

Screen Shot 2022-05-13 at 23.14.43.png
 

File đính kèm

Upvote 0
Mới mày mò test thử 2 cái thư viện này bằng hình thức tạo mã QR cho danh sách 30 cái tên và lưu luôn xuống ổ đĩa.
Kết quả là Zxing vẫn nhanh hơn nhiều. Anh xem file đính kèm xem thử đoạn code chỉnh sửa tạm cho việc lưu xuống ổ đĩa có vấn đề gì không nhé (của Yas78).
Không, tôi không xét ZXing. Do tác giả bài #4 phàn nàn là code VBA trong bài #4 chạy quá chậm, và hỏi về code Excel thuần tuý

Cảm ơn anh,anh có thể viết một ứng dụng tạo qrcode offline siêu tốc độ bằng excel mà không sử dụng thư viện liên kết ngoài được không ạ.

nên mới có code bài #14. Tôi chỉ so sánh 2 code này thôi.

Tôi kết luận là code bài #14 nhanh hơn code bài #4. Tức chỉ so sánh 2 code không sử dụng thư viện liên kết ngoài. Không có kết luận là "code bài #14 NHANH NHÂT trong các code trong chủ đề".

ZXing vẫn là vô địch. Nếu là tôi tôi sẽ dùng ZXing, nhưng nhiều người ngại EXE, DLL.
 
Upvote 0
Mới mày mò test thử 2 cái thư viện này bằng hình thức tạo mã QR cho danh sách 30 cái tên và lưu luôn xuống ổ đĩa.
Kết quả là Zxing vẫn nhanh hơn nhiều. Anh xem file đính kèm xem thử đoạn code chỉnh sửa tạm cho việc lưu xuống ổ đĩa có vấn đề gì không nhé (của Yas78).
Tôi không kiểm tra code nhưng kết quả trên máy tôi như sau:

Time elapsed Zxing = 4968
Time elapsed = 5171

Time elapsed = 6328
Time elapsed Zxing = 765

Time elapsed Zxing = 719
Time elapsed = 6360

Time elapsed = 6125
Time elapsed Zxing = 735

Lần đầu 2 thời gian gần như nhau tuy ZXing vẫn nhanh hơn chút. Từ các lần sau (vẫn không đóng Form) thì rõ ràng ZXing vô địch.
 
Upvote 0
Không, tôi không xét ZXing. Do tác giả bài #4 phàn nàn là code VBA trong bài #4 chạy quá chậm, và hỏi về code Excel thuần tuý

Vâng anh. Ở đây mình chỉ bàn luận, làm test thử cái giải pháp xem thử cái nào nhanh, thuận tiện, phù hợp cho ứng dụng của mình thôi và để hiểu thêm các đặc điểm của từng giải pháp.
 
Upvote 0
Lên sao hỏa con người còn làm được, mã VBA tạo barcode thôi thì có gì mà khó bạn

Xin lỗi các bạn mình quên chỉ dẫn:
Dưới đây là thư viện QRCodeLib của một anh Nhật Bản, ảnh dựa trên phát minh của công ty Denso Wave, nên mã được chia sẻ nguồn mở.
Dựa trên phát minh người khác là không được phép nói mình sở hữu nhé các bạn.

Mã duy nhất chỉ sử dụng VBA.

Tôi khuyên các bạn không nên sử dụng thư viện này bởi vì nó gây tốn kém và tiêu hao tài nguyên khi khởi động Excel.
Các bạn nên sử dụng API online rất dễ dàng, nhanh chóng và gọn lẹ hơn rất là nhiều.

File bác nào đổi đôi hộ em với dùng OF 2017 ko mở dc đuôi này . e cảm ơn !
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom