Bị lỗi file Chuong 17 - MsgBoxUni_UserForm_TiengViet & Font convert (sách exel nâng cao)

Liên hệ QC
Cái đó do win bạn dùng 32 bit nên nó báo vây.
Nếu dùng 64 bit.
# if vba7 then
Private declare ptrsafe....... Ptr
# else
Chèn code đỏ vào
# end if
Bạn viết cái 3 chấm kia thì người ta làm sao biết làm? Đã mua sách là chưa biết mới mua. Mua sách rồi lại phải tìm kiếm, đi hỏi người khác là chỗ 3 chấm kia viết thế nào? Thế thì mua sách làm gì? Mà là nâng cao đấy nhé. 64 bit có từ lâu, sách mới viết, tái bản thì sao không viết?
 
Upvote 0
Bạn chụp đoạn code phía trên đoạn báo lỗi xem sao? Khả năng bạn dùng Office 64bit nên chưa update.
Thì đúng rồi. Thông báo lỗi nói rõ ràng mà.

Tôi tò mò nên tải về tập tin.

Chỗ đỏ trong hình là
Mã:
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
                                      ByVal hWnd1 As Long, _
                                      ByVal hWnd2 As Long, _
                                      ByVal lpsz1 As String, _
                                      ByVal lpsz2 As String) As Long
...

Hoặc là bạn chỉ khai báo cho 32 bit trong toàn bộ tập tin và ghi chú rõ. Hoặc khai báo cho 32 bit và 64 bit trong toàn bộ tập tin. Không ai làm nửa vời cả. Không thể chỗ này khai báo cho 32 và 64 bit nhưng ở chỗ khác trong cùng tập tin thì chỉ khai báo cho 32 bit.

Trong cùng tập tin ở trên thì bạn có khai báo cho 32 và 64 bit nhưng ngay ở dưới lại chỉ có cho 32 bit
Mã:
#If VBA7 Then
  Private Declare PtrSafe Function DefWindowProcW Lib "user32" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPtr
#Else
  Private Declare Function DefWindowProcW Lib "user32" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
#End If
'For the Title form
Private Const WM_SETTEXT As Long = &HC
'******************************************************************************************************

Private Const C_USERFORM_CLASSNAME = "ThunderDFrame"


Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
                                      ByVal hWnd1 As Long, _
                                      ByVal hWnd2 As Long, _
                                      ByVal lpsz1 As String, _
                                      ByVal lpsz2 As String) As Long


Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
                                    ByVal lpClassName As String, _
 
Upvote 0
Cơ bản em toàn dùng Office 32-bit nên không để ý :)
À mà
Mã:
Private Declare PtrSafe Function DefWindowProcW Lib "user32" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPtr
là sai.
Theo tôi phải là
Mã:
Private Declare PtrSafe Function DefWindowProcW Lib "user32" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPtr
Nhờ bác update cho 64-bit nhé.
Mã:
#If VBA7 Then
    Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _
                ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
                ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr
#Else
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
                ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
                ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
#End If
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu sách lập trình VBA GPE mà liên quan đến lập trình API, nếu chỉ viết trên Office 32 bit khả năng phải cải biên sớm vì bây giờ người ta hay cài Office 64 bit lắm khi đó sẽ nhiều người gặp lỗi như trên.
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu sách lập trình VBA GPE mà liên quan đến lập trình API, nếu chỉ viết trên Office 32 bit khả năng phải cải biên sớm vì bây giờ người ta hay cài Office 64 bit lắm khi đó sẽ nhiều người gặp lỗi như trên.
Phần này từ hàm cũ của em, mà cũng chỉ dùng mỗi API ở nội dung này, nhưng quên không update cho Excel 64bit thôi, còn đã xong với Window 64bit rồi. Trong sách cũng có hướng dẫn, bạn đọc có thể vận dụng để sửa lại.
 
Upvote 0
Bác ơi, bác học VBA thì bác phải thường xuyên dịch các cảnh báo, thông báo, chỉ thị, ... sang tiếng Việt thì bác mới hiểu nó nói gì.
Từ đó mới soát lỗi, sửa lỗi.

Cứ mỗi cảnh báo cứ đăng bài hỏi hoài thôi, tức là sẽ học đến tết Công-Gô.
-----------
JavaScript:
Compile error:
The code in this project must be updated for use on 64-bit
systems. Please review and update Declare statements and
then mark them with the PtrSafe attribute.

Dịch bởi Google ----------------------------------

Lỗi biên dịch:
Mã trong dự án này phải được cập nhật để sử dụng trên 64 bit
hệ thống. Vui lòng xem lại và cập nhật Tuyên bố khai báo và
sau đó đánh dấu chúng bằng thuộc tính PtrSafe.


Sau đó bác cần hỏi:
"Trong VBA vì sao có sự phân biệt hệ thống 32bit và 64bit, Office 32bit và 64bit"
"Những dòng code bị đỏ có ý nghĩa gì"
"Lập trình tương thích hệ thống 32bit và 64bit, Office 32bit và 64bit như thế nào"
Những câu hỏi cơ bản khi học VBA đó bác.

Chẳng hạn như trên Win64 thì mới có vbLongLong, CLngLng, khai báo dấu ^ cho LongLong hoặc LongPtr , ...

Đó mới là những câu hỏi nên hỏi khi học VBA.

Để copy nhanh cảnh báo, thông báo, chỉ thị, ... bác tải ứng dụng Capture2Text để chuyển hình ảnh thành chữ, sau đó dịch sang tiếng Việt ngay trên ứng dụng này. Sẽ giúp cho việc học VBA dễ dàng hơn.

Hoặc bác copy nguyên đoạn tiếng Anh kia hỏi Google, bởi vì hầu hết các lỗi, cảnh báo, thông báo, chỉ thị xảy ra đều có trên Google, vì VBA là ngôn ngữ script khá là cũ kĩ.
 
Upvote 0
Phần này từ hàm cũ của em, mà cũng chỉ dùng mỗi API ở nội dung này, nhưng quên không update cho Excel 64bit thôi, còn đã xong với Window 64bit rồi. Trong sách cũng có hướng dẫn, bạn đọc có thể vận dụng để sửa lại.

Thảo nào em thấy cái tên trên caption quen quen :). Nếu chỉ ít như a nói thì chỉ cần topic này bổ sung cũng được rồi anh.
 
Upvote 0
Vì sách anh dùng hàm này e viết từ lâu rồi cho Office 32 bit. Sau này em đã cập nhật cho cả 32 và 64. Anh cập nhật nguồn tại đây nhé
 
Upvote 0
Tôi nghĩ sách đã lỡ in, thì nên viết thêm 1 phụ lục bổ sung (chừng 10 trang), cho những mục như chủ đề này. In ra giấy A4 dán bìa và kẹp theo sách khi có người mua
 
Upvote 0
Tôi nghĩ sách đã lỡ in, thì nên viết thêm 1 phụ lục bổ sung (chừng 10 trang), cho những mục như chủ đề này. In ra giấy A4 dán bìa và kẹp theo sách khi có người mua

Đây là tập tin hỗ trợ thôi bác, chứ không ảnh hưởng gì đến nội dung sách, trong sách đã hướng dẫn cách hoạt động trong môi trường 32 và 64bit.
Các tập tin khác đều hoạt động bình thường, chỉ mỗi tập tin này sửa chưa hết, do chủ quan khi toàn sử dụng Office 32bit. Chỉ cần update là xong.
 
Upvote 0
Theo tôi thì phần lỗi không quan trọng lắm. Nhưng nếu tái bản sách thì:
Quyển "cơ bản" tôi thêm:
1. phân biệt giữa Sub và Function. Tầm vực của biến và Sub/Function
2. phân biệt giữa các hàm VBA và hàm Application.[Function]
3. Cấu trúc dữ liệu (data structure).
4. Các chương 12, 13, 15 tôi cho vào phụ lục (phụ lục A, B, C), thay vì chương. Chúng là để mở mang kiến thức chứ đâu phải là căn bản VBA.

1575003374431.png

Quyển "nâng cao" tôi thêm:
1. sửa chương 23: "Lý thuyết Cơ Sở Dữ Liệu và Kêt Nối CSDL bằng ADO"
2. thêm phần phụ lục:
Phụ lục A: cách thức debug (bậc cao)
Phụ lục B: các lỗi cơ bản do mặc định môi trường. Điển hình các đối tượng kết nối sớm sẽ sử dụng hàm mặc định khác với kết nối trễ. Và cái vụ 32-64 bit có thể cho vào mục này.

1575004218959.png
 
Upvote 0
Theo tôi thì phần lỗi không quan trọng lắm. Nhưng nếu tái bản sách thì:
Quyển "cơ bản" tôi thêm:
1. phân biệt giữa Sub và Function. Tầm vực của biến và Sub/Function
2. phân biệt giữa các hàm VBA và hàm Application.[Function]
3. Cấu trúc dữ liệu (data structure).
4. Các chương 12, 13, 15 tôi cho vào phụ lục (phụ lục A, B, C), thay vì chương. Chúng là để mở mang kiến thức chứ đâu phải là căn bản VBA.

View attachment 229215

Quyển "nâng cao" tôi thêm:
1. sửa chương 23: "Lý thuyết Cơ Sở Dữ Liệu và Kêt Nối CSDL bằng ADO"
2. thêm phần phụ lục:
Phụ lục A: cách thức debug (bậc cao)
Phụ lục B: các lỗi cơ bản do mặc định môi trường. Điển hình các đối tượng kết nối sớm sẽ sử dụng hàm mặc định khác với kết nối trễ. Và cái vụ 32-64 bit có thể cho vào mục này.

View attachment 229217
Bác viết sách đi mới cẩn thận được, và có người kiểm lại thì tốt, không có thì sách giờ (mà không biết có gọi là sách đúng nữa không) dễ bị lỗi và sai làm người đọc khó khăn và chắp vá kiến thức.
 
Upvote 0
Bác viết sách đi mới cẩn thận được, và có người kiểm lại thì tốt, không có thì sách giờ (mà không biết có gọi là sách đúng nữa không) dễ bị lỗi và sai làm người đọc khó khăn và chắp vá kiến thức.
Viết cái gì cũng có sơ sót.
Phần mềm cũng có nhiều phiên bản. Chủ yếu là mỗi phiên bản mới có cải tiến.

"chắp vá kiến thức" là việc chủ quan. Tuỳ người sử dụng thôi.
Nó cũng như cái quần rách. Biết đi đứng cho ngăn nắp thì cũng kín đáo như ai. Điềun quan trọng là chịu khó để ý người ta chỉ cho hở chỗ nào thì cố mà vá chỗ ấy.
 
Upvote 0
Web KT
Back
Top Bottom