Tiếng Việt trong Editor VB, đã có ai nghiên cứu? (1 người xem)

  • Thread starter Thread starter siwtom
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

siwtom

Thành viên gắn bó
Tham gia
19/3/08
Bài viết
2,127
Được thích
4,211
Chủ đề đã đóng nên tôi viết ở đây.
Bạn ndu96081631 từng viết:
"Giá như cãi xong, ta gõ được tiếng Việt vào khung soạn thảo VBA thì... Ẹc.. Ẹc... tôi cãi tới sáng"
Tôi thấy vấn đề cũng đáng quan tâm. Chỉ có điều tôi chưa chắc lắm về nhu cầu của mọi người tới đâu. Viết để nhìn thấy tiếng Việt thay cho "đầu trâu mặt ngựa" thì chắc chắn viết được. Nhưng muốn nhập vào sheet những chuỗi ký tự ấy thì phải convert. Có thể nếu chỉ thế thì vấn đề đã được giải quyết từ lâu nhưng tôi ghé qua diễn đàn cách đây không lâu nên không biết.
Nếu tôi không lầm (tôi không khẳng định) thì không thể viết tiếng Việt unicode trong Editor VB. Nhưng có thể viết tiếng Việt (không có chữ unicode) trong VBE, với nghĩa là có thể viết
"bình luận vd. ' "Hàm số có hai biến" hoặc s = "Nguyễn Diệu My"
và nhìn thấy tiếng Việt như trên chứ không phải là đầu trâu mặt ngựa. Nhưng tất nhiên để nhập chuỗi s vào sheet thì vẫn phải convert.
Hay là bạn ndu96081631 muốn vừa nhìn thấy tiếng Việt trong Editor vừa có thể nhập thẳng vào sheet? Vì khâu nhìn thấy tiếng Việt trong Editor mọi người đã làm được từ lâu?
 
Không gõ Unicode trong VBE được, nhưng các mã khác thì VÔ TƯ, nhưng tôi chưa hiểu tại sao bạn muốn thảo luận vấn đề này?

Xem hình:
 

File đính kèm

  • Picture3.jpg
    Picture3.jpg
    37.8 KB · Đọc: 143
Upvote 0
Không gõ Unicode trong VBE được, nhưng các mã khác thì VÔ TƯ, nhưng tôi chưa hiểu tại sao bạn muốn thảo luận vấn đề này?
Xem hình:
Thì đọc bài của tôi cũng thấy mà bạn. Nếu tôi đọc thấy: "... ta gõ được tiếng Việt unicode vào khung soạn thảo VBA thì... " thì chắc chắn không có bài này. Vì thiếu unicode nên tôi tưởng là chưa giải quyết được vấn đề tiếng Việt nói chung chứ không chỉ unicode. Vì thế tôi hỏi cho chắc chắn.
Tất nhiên nếu không unicode thì cũng như bạn đã gửi hình và như tôi kết luận: chắc chắn được.
Nếu bạn viết được bằng vd. VNI trong VBA thì theo tôi cũng có nghĩa là bạn có thể nhập thẳng vào sheet mà không cần convert. Tất nhiên việc nhập chuỗi như thế vào sheet còn tùy. vd. nếu viết bằng mã windows-1258 thì khi nhập vào sheet phải convert.
Vậy thì còn vấn đề gì nữa đâu. VNI hay unicode cũng là tiếng Việt. Tất nhiên nếu được unicode thì tốt hơn.
Mà tôi không muốn thảo luận, tôi chỉ muốn hỏi là vấn đề này đã được giải quyết trên diễn đàn chưa. Tất nhiên tôi cũng biết viết mà
Còn chuyện không viết được unicode trong VBA thì dĩ nhiên rồi - hàm system IsWindowUnicode trả về FALSE cho cửa sổ VBA (lớp VbaWindow)
 
Lần chỉnh sửa cuối:
Upvote 0
Nghĩ cũng lạ, mã UNICODE do Win có sẳn mà không xài được tiếng Việt trong VBE còn VNI thì lại xài được hầu hết các control, msgbox và VBE.

Trong sheet hàm PROPER cho mã UNICODE bị lỗi chữ có dấu tiếng Việt, nhưng dùng hàm này cho VNI thì không bị lỗi đó. Thiết nghĩ mã VNI mặc dù không phải mã quốc tế, nhưng lại vượt trội hơn mã Win phải không?
 
Upvote 0
Mà mình thấy nhất thiết đâu cần phải viết tiếng Việt được trong VBA đâu? chỉ cần cho nó hiển thị ra là tiếng Việt có dấu để người đọc có thể hiểu là được, nếu theo mình thấy mà viết đc tiếng Việt trong VBA mà khi hiển thị ra ngoài mà không như mong muốn thì cũng như không? nếu bạn cần hiển thị cách nhanh chóng thì bạn xem ở đây nha! code của bác Ndu đó ......

http://www.giaiphapexcel.com/forum/showthread.php?64796-L%E1%BB%97i-ch%E1%BB%AF-khi-l%E1%BA%ADp-tr%C3%ACnh
 
Upvote 0
Mà mình thấy nhất thiết đâu cần phải viết tiếng Việt được trong VBA đâu? chỉ cần cho nó hiển thị ra là tiếng Việt có dấu để người đọc có thể hiểu là được, nếu theo mình thấy mà viết đc tiếng Việt trong VBA mà khi hiển thị ra ngoài mà không như mong muốn thì cũng như không? nếu bạn cần hiển thị cách nhanh chóng thì bạn xem ở đây nha! code của bác Ndu đó ......

http://www.giaiphapexcel.com/forum/showthread.php?64796-Lỗi-chữ-khi-lập-trình

Dĩ nhiên là thay vì bạn viết code, những câu ghi chú trong VBE hoặc những câu thoại trong MsgBox trong môi trường VBE nếu chúng dễ dàng cho ta đánh tiếng Việt vào thì sẽ làm cho mình dễ nhớ hơn, chứ viết rồng viết rắn ở trong đó rồi convert thế nào đó mới đọc được thì làm mình mất thời gian. Ta cứ đánh hẳn được tiếng Việt tại VBE rồi chuyện hiển thị ta convert sau thì có lợi hơn cho người lập trình đúng không?
 
Upvote 0
Public Const VIETNAMESE_CHARSET = 163


' ma dung san cua nhung ky tu Viet
Private Const dungsan_code = "224 7843 227 225 7841 226 7847 7849 7851 7845 7853 259 7857 7859 7861 7855 7863 192 7842 195 193 7840 194 7846 7848 7850 7844 7852 258 7856 7858 7860 7854 7862 273 272 232 7867 7869 233 7865 234 7873 7875 7877 7871 7879 200 7866 7868 201 7864 202 7872 7874 7876 7870 7878 236 7881 297 237 7883 204 7880 296 205 7882 242 7887 245 243 7885 417 7901 7903 7905 7899 7907 244 7891 7893 7895 7889 7897 210 7886 213 211 7884 416 7900 7902 7904 7898 7906 212 7890 7892 7894 7888 7896 249 7911 361 250 7909 432 7915 7917 7919 7913 7921 217 7910 360 218 7908 431 7914 7916 7918 7912 7920 7923 7927 7929 253 7925 7922 7926 7928 221 7924"
' ma to hop cua nhung ky tu Viet
Private Const tohop_code1 = "50331745 50921569 50528353 50397281 52625505 226 50331874 50921698 50528482 50397410 52625634 259 50331907 50921731 50528515 50397443 52625667 50331713 50921537 50528321 50397249 52625473 194 50331842 50921666 50528450 50397378 52625602 258 50331906 50921730 50528514 50397442 52625666 273 272 50331749 50921573 50528357 50397285 52625509 234 50331882 50921706 50528490 50397418 52625642 50331717 50921541 50528325 50397253 52625477 202 50331850 50921674 50528458 50397386 52625610 50331753 50921577 50528361 50397289 52625513 50331721 50921545 50528329 50397257 52625481 50331759 "
Private Const tohop_code2 = "50921583 50528367 50397295 52625519 417 50332065 50921889 50528673 50397601 52625825 244 50331892 50921716 50528500 50397428 52625652 50331727 50921551 50528335 50397263 52625487 416 50332064 50921888 50528672 50397600 52625824 212 50331860 50921684 50528468 50397396 52625620 50331765 50921589 50528373 50397301 52625525 432 50332080 50921904 50528688 50397616 52625840 50331733 50921557 50528341 50397269 52625493 431 50332079 50921903 50528687 50397615 52625839 50331769 50921593 50528377 50397305 52625529 50331737 50921561 50528345 50397273 52625497"
Private Const win_1258 = "aÌaÒaÞaìaòâ âÌâÒâÞâìâòã ãÌãÒãÞãìãòAÌAÒAÞAìAò ÂÌÂÒÂÞÂìÂòà ÃÌÃÒÃÞÃìÃòð Ð eÌeÒeÞeìeòê êÌêÒêÞêìêòEÌEÒEÞEìEòÊ ÊÌÊÒÊÞÊìÊòiÌiÒiÞiìiòIÌIÒIÞIìIòoÌoÒoÞoìoòõ õÌõÒõÞõìõòô ôÌôÒôÞôìôòOÌOÒOÞOìOòÕ ÕÌÕÒÕÞÕìÕòÔ ÔÌÔÒÔÞÔìÔòuÌuÒuÞuìuòý ýÌýÒýÞýìýòUÌUÒUÞUìUòÝ ÝÌÝÒÝÞÝìÝòyÌyÒyÞyìyòYÌYÒYÞYìYò"
Private Const vowel = "aeiouyAEIOUYâãÂÃêÊõôÕÔýÝ"


Public Function UniToWindows1258(ByVal text As String) As String
' chuyen unicode dung san hoac to hop ve unicode dung san
Dim n As Integer, k As Integer
Dim s As String, tohop_code As String


text = text + " "


tohop_code = tohop_code1 + tohop_code2
s = ""
n = 1
k = Len(text)
While n < k
kytu1 = Mid(text, n, 1)
kytu2 = Mid(text, n + 1, 1)
codkytu = CStr(65536 * AscW(kytu2) + AscW(kytu1))
If Len(codkytu) < 8 Then codkytu = codkytu & String(8 - Len(codkytu), " ")
index = InStr(1, tohop_code, codkytu, 0)
If (index Mod 9) = 1 Then
' la ky tu Viet unicode to hop
n = n + 2
s = s & Trim(Mid(win_1258, (2 * index + 7) / 9, 2))
Else
n = n + 1
index = InStr(1, dungsan_code, AscW(kytu1), 0)
If (AscW(kytu1) > 127) And ((index Mod 5) = 1) Then
' la ky tu Viet unicode dung san
s = s & Trim(Mid(win_1258, (2 * index + 3) / 5, 2))
Else
' khong la ky tu Viet unicode
s = s & kytu1
End If
End If
Wend
UniToWindows1258 = s
End Function
Public Function Windows1258toUnicode(ByVal textin As String) As String
'Chuyen doi ma windows 1258 to Unicode
Dim n As Integer, k As Integer, index1 As Integer, index2 As Integer
Dim s As String, kytu1 As String, kytu2 As String, text As String, result As String
Dim isVowel As Boolean


text = textin
result = ""
s = ""
n = 1
k = Len(textin)
While n <= k
kytu1 = Mid(text, n, 1)
s = kytu1
kytu2 = ""
index1 = 0
index2 = 0
isVowel = False

If kytu1 <> " " Then
index1 = InStr(win_1258, kytu1)
isVowel = InStr(vowel, kytu1) > 0

If index1 > 0 Then
If isVowel Then
kytu2 = Trim(Mid(text, n, 2))
If Len(kytu2) = 2 Then
index2 = InStr(win_1258, kytu2)
End If
End If
If index2 > 0 Then

's = "[" & Mid(dungsan_code, (((index2 - 1) / 2 + 1) - 1) * 5 + 1, 5) & "]" '
s = ChrW(CLng(Trim(Mid(dungsan_code, (((index2 - 1) / 2 + 1) - 1) * 5 + 1, 5))))
n = n + 1
Else
If Not isVowel Then
's = "{" & Mid(dungsan_code, (((index1 - 1) / 2 + 1) - 1) * 5 + 1, 5) & "}"
s = ChrW(CLng(Trim(Mid(dungsan_code, (((index1 - 1) / 2 + 1) - 1) * 5 + 1, 5))))
End If
End If
End If
End If
result = result & s
n = n + 1
Wend
Windows1258toUnicode = result
End Function
 
Upvote 0
Web KT

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

Back
Top Bottom