Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Hàm chuyển chuỗi Unicode tiếng Việt thành Chuỗi mã Unicode trong VBA
#1
Ta đã biết, trong VBA của office 2k3 về trước, ta vô phương nhập được chuỗi tiếng Việt Unicode. Đa số ta quay lại bảng mã VNI hoặc ABC.
Tuy nhiên, theo xu hướng, càng ngày càng ít người dùng hai bảng mã này.
Một giải pháp khác là ta thể hiện chuỗi Unicode tiếng Việt đó nhờ hàm Chrw( mã unicode)
Ví dụ: Để nhập 1 câu sau:
text1.value= "ngày tháng năm, một hai ba bốn, những"
Trong VBA ta phải nhập là:
text1.value="ngày tháng n" & ChrW(259) & "m, m" & ChrW(7897) & "t hai ba b" & ChrW(7889) & "n, nh" & ChrW(7919) & "ng"
Việc dùng hàm này rất mất thời gian và dễ nhầm lẫn vì bảng mã Unicode có tới gần 65000 ký tự.



Rất may, chúng ta có 1 hàm hỗ trợ ta dịch 1 chuỗi Unicode thành chuỗi VBA Unicode.

Mã:
Function VbaUni(chuoi As String) As String
If chuoi = "" Then
VbaUni = """"""
Else
chuoi = chuoi & " "
If AscW(Left(chuoi, 1)) < 256 Then VbaUni = """"
For n = 1 To Len(chuoi) - 1
uni1 = Mid(chuoi, n, 1)
uni2 = AscW(Mid(chuoi, n + 1, 1))
If AscW(uni1) > 255 And uni2 > 255 Then
VbaUni = VbaUni & "ChrW(" & AscW(uni1) & ") & "
ElseIf AscW(uni1) > 255 And uni2 < 256 Then
VbaUni = VbaUni & "ChrW(" & AscW(uni1) & ") & """
ElseIf AscW(uni1) < 256 And uni2 > 255 Then
VbaUni = VbaUni & uni1 & """ & "
Else
VbaUni = VbaUni & uni1
End If
Next
If Right(VbaUni, 4) = " & """ Then
VbaUni = Mid(VbaUni, 1, Len(VbaUni) - 4)
Else
VbaUni = VbaUni & """"
End If
End If
End Function

Dưới đây là 1 ứng dụng của hàm này.
[Hình: vbaunicode.png]

Ta nhập chuỗi tiếng Việt vào ô phía trên, nhấn chuyển, và copy giá trị trả về ở ô phía dưới vào chỗ cần điền tiếng Việt là được!

Chúc thành công!
Download
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
#2
Em có một bảng mà giá trị các trường là tiếng việt.Em khai báo
dim rs as Dao.recordset

Cho rs chạy trong bảng lấy ra các trường này.

Vấn đề là làm thế nào hiển thị ra tiếng việt bây giờ nhỉ.happy
Chữ ký của hmanhha Xin chào, mình là hmanhha, Tham gia http://thuthuataccess.com/forum từ ngày 01-11 -12.
Reply
Những người đã cảm ơn
#3
(13-03-13, 10:00 AM)hmanhha Đã viết: Em có một bảng mà giá trị các trường là tiếng việt.Em khai báo
dim rs as Dao.recordset

Cho rs chạy trong bảng lấy ra các trường này.

Vấn đề là làm thế nào hiển thị ra tiếng việt bây giờ nhỉ.happy

Câu hỏi của bạn không rõ ràng. hiển thị tiếng Việt ra đâu? Trên form? MsgBox?...
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#4
(13-03-13, 11:31 AM)Xuân Thanh Đã viết:
(13-03-13, 10:00 AM)hmanhha Đã viết: Em có một bảng mà giá trị các trường là tiếng việt.Em khai báo
dim rs as Dao.recordset

Cho rs chạy trong bảng lấy ra các trường này.

Vấn đề là làm thế nào hiển thị ra tiếng việt bây giờ nhỉ.happy

Câu hỏi của bạn không rõ ràng. hiển thị tiếng Việt ra đâu? Trên form? MsgBox?...
Bác ơi.
Em hiện trong Treeview.
khi lấy str = rst!SMG_Name thì ký tự đã ra loằng ngoằng rùi bác ạ.Nên khi hiển thị lên nó không đúng là tiếng việt
DB đã được upload lên đây nè bác
http://www.mediafire.com/?u6cudeu9hcus4ql
Chữ ký của hmanhha Xin chào, mình là hmanhha, Tham gia http://thuthuataccess.com/forum từ ngày 01-11 -12.
Reply
Những người đã cảm ơn
#5
(06-10-11, 04:30 PM)Noname Đã viết: Ta đã biết, trong VBA của office 2k3 về trước, ta vô phương nhập được chuỗi tiếng Việt Unicode. Đa số ta quay lại bảng mã VNI hoặc ABC.
Tuy nhiên, theo xu hướng, càng ngày càng ít người dùng hai bảng mã này.
Một giải pháp khác là ta thể hiện chuỗi Unicode tiếng Việt đó nhờ hàm Chrw( mã unicode)
Ví dụ: Để nhập 1 câu sau:
text1.value= "ngày tháng năm, một hai ba bốn, những"
Trong VBA ta phải nhập là:
text1.value="ngày tháng n" & ChrW(259) & "m, m" & ChrW(7897) & "t hai ba b" & ChrW(7889) & "n, nh" & ChrW(7919) & "ng"
Việc dùng hàm này rất mất thời gian và dễ nhầm lẫn vì bảng mã Unicode có tới gần 65000 ký tự.



Rất may, chúng ta có 1 hàm hỗ trợ ta dịch 1 chuỗi Unicode thành chuỗi VBA Unicode.

Mã:
Function VbaUni(chuoi As String) As String
If chuoi = "" Then
VbaUni = """"""
Else
chuoi = chuoi & " "
If AscW(Left(chuoi, 1)) < 256 Then VbaUni = """"
For n = 1 To Len(chuoi) - 1
uni1 = Mid(chuoi, n, 1)
uni2 = AscW(Mid(chuoi, n + 1, 1))
If AscW(uni1) > 255 And uni2 > 255 Then
VbaUni = VbaUni & "ChrW(" & AscW(uni1) & ") & "
ElseIf AscW(uni1) > 255 And uni2 < 256 Then
VbaUni = VbaUni & "ChrW(" & AscW(uni1) & ") & """
ElseIf AscW(uni1) < 256 And uni2 > 255 Then
VbaUni = VbaUni & uni1 & """ & "
Else
VbaUni = VbaUni & uni1
End If
Next
If Right(VbaUni, 4) = " & """ Then
VbaUni = Mid(VbaUni, 1, Len(VbaUni) - 4)
Else
VbaUni = VbaUni & """"
End If
End If
End Function

Dưới đây là 1 ứng dụng của hàm này.
[Hình: vbaunicode.png]

Ta nhập chuỗi tiếng Việt vào ô phía trên, nhấn chuyển, và copy giá trị trả về ở ô phía dưới vào chỗ cần điền tiếng Việt là được!

Chúc thành công!
Download

NoName ơi! hình như cái này không dùng được msg mà chỉ xài cho value hoặc frm thôi fai ko? nếu muốn msg thì fai thêm cái này:
Tác giả: Noname
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function MessageBoxW Lib "user32" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

Public Function msgBoxUni(ByVal PromptUni As Variant, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal TitleUni As Variant = vbNullString) As VbMsgBoxResult
Dim BStrMsg, BStrTitle
BStrMsg = StrConv(PromptUni, vbUnicode)
BStrTitle = StrConv(TitleUni, vbUnicode)

msgBoxUni = MessageBoxW(GetActiveWindow, BStrMsg, BStrTitle, Buttons)
End Function
' msg:
msgBoxUni "ngày tháng n" & ChrW(259) & "m, m" & ChrW(7897) & "t hai ba b" & ChrW(7889) & "n, nh" & ChrW(7919) & "ng"
Cám ơn NoName rất nhiều...!034
Chữ ký của trungn077 Xin chào, mình là trungn077, Tham gia http://thuthuataccess.com/forum từ ngày 09-07 -12.
ღღღღღTài sản của trungn077 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn thucgia , khanghychu
#6
Cái này hơi ngược với vấn đề của em.

Search mấy hôm nay thấy oải quá.
Unicode TreeView thấy đầy trên internet.

Thằng Nga thì không hiển thị được tiếng Nga, thằng Tầu thì không hiển thị được tiếng tầu, thằng Nhật không hiển thị được tiếng nhật.

Đến chán.
Chữ ký của hmanhha Xin chào, mình là hmanhha, Tham gia http://thuthuataccess.com/forum từ ngày 01-11 -12.
Reply
Những người đã cảm ơn
#7
Xin thưa : Treeview tương thích tốt nhất với font VNI, không tương thích font Unicode
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#8
(15-03-13, 03:09 PM)Xuân Thanh Đã viết: Xin thưa : Treeview tương thích tốt nhất với font VNI, không tương thích font Unicode
Thân mến
Thế thì theo bác là làm thế nào chuyển đổi font trong database có được không.

Đến khổ.
Chữ ký của hmanhha Xin chào, mình là hmanhha, Tham gia http://thuthuataccess.com/forum từ ngày 01-11 -12.
Reply
Những người đã cảm ơn
#9
(15-03-13, 07:09 PM)hmanhha Đã viết:
(15-03-13, 03:09 PM)Xuân Thanh Đã viết: Xin thưa : Treeview tương thích tốt nhất với font VNI, không tương thích font Unicode
Thân mến
Thế thì theo bác là làm thế nào chuyển đổi font trong database có được không.

Đến khổ.

Không cần chuyển font cho cả Database, chỉ cần dùng font VNI cho Treeview là được
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#10
(16-03-13, 12:06 PM)Xuân Thanh Đã viết:
(15-03-13, 07:09 PM)hmanhha Đã viết:
(15-03-13, 03:09 PM)Xuân Thanh Đã viết: Xin thưa : Treeview tương thích tốt nhất với font VNI, không tương thích font Unicode
Thân mến
Thế thì theo bác là làm thế nào chuyển đổi font trong database có được không.

Đến khổ.

Không cần chuyển font cho cả Database, chỉ cần dùng font VNI cho Treeview là được
Thân mến
Em up cả DB lên rùi.Bác làm ơn làm phúc xem sửa chỗ nào thì bảo em luôn cái được không chứ cứ chung chung chi sự thế này mệt quá đi mất.Làm mãi không được.

em đã thêm dòng

.Font.Name = "VNI-Couri"

để xác định font cho cái treeview mà có được đâu, không nhẽ ngồi thử từng font chăng
Đang định chuyển sang Visual Studio 10 thấy cũng mệt không kém.Chuyển sang đó thì cái treeview hiện tiếng việt ngon lành nhưng những phần khác lại bắt đầu lại từ đầu form, ..... mệt quá đi mất.040
Chữ ký của hmanhha Xin chào, mình là hmanhha, Tham gia http://thuthuataccess.com/forum từ ngày 01-11 -12.
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Hướng Dẫn Hàm API trong quản lý file và folder maidinhdan 1 293 22-04-16, 09:40 AM
Bài mới nhất: kieu manh
  Hướng Dẫn Tổng hợp hàm xử lý văn bản và chuỗi ( Có ví dụ) maidinhdan 0 320 16-04-16, 01:17 PM
Bài mới nhất: maidinhdan
  Hướng Dẫn Một số hàm D trong Access Xuân Thanh 12 6,661 22-01-16, 01:55 PM
Bài mới nhất: khanghychu
  Hướng Dẫn Một số hàm C... trong Access Xuân Thanh 2 1,328 21-01-16, 11:06 AM
Bài mới nhất: khanghychu
  [Hàm] Hàm tách lấy số trong một chuỗi cho trước Xuân Thanh 11 2,130 13-10-15, 10:08 AM
Bài mới nhất: tranthanhan1962

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ