ongke0711 > 18-04-20, 11:08 AM
(18-04-20, 10:49 AM)Xuân Thanh Đã viết: @ongke0711
lpText và lpCaption sao lại là LongPr? hwnd thì OK
Xuân Thanh > 18-04-20, 12:14 PM
(18-04-20, 11:08 AM)ongke0711 Đã viết:(18-04-20, 10:49 AM)Xuân Thanh Đã viết: @ongke0711
lpText và lpCaption sao lại là LongPr? hwnd thì OK
À cái hàm MsgboxUni này em có sửa một chút là trỏ thẳng ngay tới địa chỉ của cái message text trên bộ nhớ để khỏi phải qua công đoạn chuyển đổi từ chuỗi Unicode sang ANSI, lưu xuống bộ nhớ rồi chyển đổi lại Unicode để hiển thị. Chuyển Unicode qua ANSI dễ bị lỗi ký tự lắm.
Do dùng Pointer nên phải dùng LongPtr.
Vanlinhmt > 19-04-20, 01:05 AM
(18-04-20, 10:02 AM)ongke0711 Đã viết:(18-04-20, 12:24 AM)Vanlinhmt Đã viết: Em cũng nghĩ vậy. Theo em hiểu thì trước khi tắt file acc Compact database nên phát sinh các lần mở sau.
Có điều nếu giữ nguyên file của anh gửi dạng .mdb thì chạy không bao giờ bị lỗi bật tắt mấy trăm phát vẫn ok nên em nghĩ có vấn đề gì đó khi nén định dạng khi data mới accdb
từ đó test trên máy khác nhưng lại không bị ==> Chỉ có Máy em có vấn đề với định dạng file mới
Hiện đã cài lại office nhưng vẫn bị lỗi chưa khắc phục được. Em dùng office 2016-64bit
Đau đầu và nan giải. Để em thử thêm xem tn
À lúc đầu tôi tưởng bạn làm trên office 32 bit. Tôi mới test trên Windows 64 bit + Office 64 bit thì đúng là nó có lỗi khi bấm mũi tên qua phải -> khi đó nó sẽ gọi hàm MsgboxUni để thông báo lỗi nếu tên vật tư bạn gõ không có.
Lỗi là do cái hàm MsgBoxuni này không tương thích hệ 64 bit. Bạn copy đoạn code dưới đây thay vào cái module MsgBoxTV là hết. Muốn chuyển qua .accdb cũng không lỗi.
Mã PHP:#If VBA7 Then
Public Declare PtrSafe Function MessageBoxW Lib "user32" _
(ByVal hwnd As LongPtr, _
ByVal lpText As LongPtr, _
ByVal lpCaption As LongPtr, _
ByVal wType As Long) As Long
#Else
Public Declare Function MessageBoxW Lib "user32" _
(ByVal hwnd As Long, _
ByVal lpText As Long, _
ByVal lpCaption As Long, _
ByVal wType As Long) As Long
#End If
Public Function msgBoxUni(ByVal sMsgUni As String, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal sTitleUni As String = vbNullString) As VbMsgBoxResult
msgBoxUni = MessageBoxW(0, StrPtr(sMsgUni), StrPtr(sTitleUni), Buttons)
End Function
Tôi cũng đã cập nhật lại file gốc để tương thích 64 bit.
tranthanhan1962 > 19-04-20, 07:59 AM
ongke0711 > 19-04-20, 09:13 AM
thuyyeu99 > 19-04-20, 10:00 AM
tranthanhan1962 > 19-04-20, 10:33 AM
Xuân Thanh > 19-04-20, 11:13 AM
tranthanhan1962 > 19-04-20, 11:37 AM
(19-04-20, 11:13 AM)Xuân Thanh Đã viết: @tranthanhan1962Đã thử đủ cách chuyển về tiếng Anh cũng vẫn vậy. Mình chuyển tiếng Việt để giảm viết một số Thông báo và sử dụng tốt hơn popup menu. Mặc dùng sử dụng ngôn ngữ hệ thống tiếng việt nhưng viễt code tiếng việt trong giao diện code vẫn bị lỗi. Muốn hiển thị tiếng việt trong code không bị lỗi phải dùng bộ gõ VIE bàn phím tiếng Vietnamese của window và gõ trong word rồi dán qua chứ nếu gõ trong giao diện code thì dấu nháy con trỏ một đường ký tự một nẻo rất chán. Sử dụng table dùng hàm Dlookup nhanh hơn. Tuy nhiên khi viết phần mềm thì vẫn sử dụng tiếng Anh
Bản Office2019 đang cài trên máy là bản tiếng Việt đúng không? Thế thì cái hàm MsgBoxUni bị lỗi là cái chắc. Dùng MsgBox thông thường là OK rồi. Thử chuyển Language về tiếng Anh xem có lỗi không?
ongke0711 > 19-04-20, 11:37 AM
(19-04-20, 10:33 AM)tranthanhan1962 Đã viết: Public Function msgBox(ByVal PromptUni As Variant, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal TitleUni As Variant = vbNullString) As VbMsgBoxResult
#If VBA7 Then
Public Declare PtrSafe Function MessageBoxW Lib "user32" _
(ByVal hwnd As LongPtr, _
ByVal lpText As LongPtr, _
ByVal lpCaption As LongPtr, _
ByVal wType As Long) As Long
#Else
Public Declare Function MessageBoxW Lib "user32" _
(ByVal hwnd As Long, _
ByVal lpText As Long, _
ByVal lpCaption As Long, _
ByVal wType As Long) As Long
#End If
Public Function msgBoxUni(ByVal sMsgUni As String, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal sTitleUni As String = "Thông báo") As VbMsgBoxResult
msgBoxUni = MessageBoxW(0, StrPtr(sMsgUni), StrPtr(sTitleUni), Buttons)
End Function