Hỗ trợ tiếng việt trong macro (1 người xem)

Liên hệ QC

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

Tôi tuân thủ nội quy khi đăng bài

ntdo.ct.qln

Thành viên mới
Tham gia
3/7/25
Bài viết
4
Được thích
0
Hiện tại em có code khi copy tiếng việt vào VBA nhưng lại lỗi font. Anh/chị giúp em vấn đề này với ạ
Function LoadXML_UTF8(filePath As String) As Object
Dim xmlDoc As Object
Dim stream As Object
Dim xmlContent As String

Set stream = CreateObject("ADODB.Stream")
With stream
.Charset = "utf-8"
.Open
.LoadFromFile filePath
xmlContent = .ReadText
.Close
End With

Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
xmlDoc.async = False
xmlDoc.validateOnParse = False
xmlDoc.LoadXML xmlContent

Set LoadXML_UTF8 = xmlDoc
End Function

Sub ThongTinDeNghiHoan()
Dim xmlDoc As Object, filePath As String, ns As String
filePath = Application.GetOpenFilename("XML Files (*.xml), *.xml", , "Ch?n file XML")
If filePath = "False" Then Exit Sub

Set xmlDoc = LoadXML_UTF8(filePath)
If xmlDoc.ParseError.ErrorCode <> 0 Then
MsgBox "L?i khi d?c XML: " & xmlDoc.ParseError.Reason
Exit Sub
End If

ns = "xmlns:ns='http://kekhaithue.gdt.gov.vn/TKhaiThue'"
xmlDoc.setProperty "SelectionNamespaces", ns

Dim soHoSo As String, ngayHoSo As String, thongTinHoSo As String
Dim mst As String, tenNNT As String
Dim diaChi As String, phuongXa As String, huyen As String, diaChiDayDu As String
Dim tuThang As String, denThang As String, kyKeKhai As String
Dim maGD As String, tenCTK As String, soTK As String, tenNH As String
Dim soDeNghiHoan As String, d As Date

On Error Resume Next
soHoSo = xmlDoc.SelectSingleNode("//ns:so").Text
ngayHoSo = xmlDoc.SelectSingleNode("//ns:ngayLapTKhai").Text
If IsDate(ngayHoSo) Then
d = CDate(ngayHoSo)
thongTinHoSo = soHoSo & " ngày " & Format(d, "dd") & " tháng " & Format(d, "mm") & " nam " & Format(d, "yyyy")
Else
thongTinHoSo = soHoSo
End If

mst = xmlDoc.SelectSingleNode("//ns:mst").Text
tenNNT = xmlDoc.SelectSingleNode("//ns:tenNNT").Text
diaChi = xmlDoc.SelectSingleNode("//ns:dchiNNT").Text
phuongXa = xmlDoc.SelectSingleNode("//ns:phuongXa").Text
huyen = xmlDoc.SelectSingleNode("//ns:tenHuyenNNT").Text
diaChiDayDu = diaChi & ", " & phuongXa & ", " & huyen & ", T?nh Ð?ng Nai"

tuThang = xmlDoc.SelectSingleNode("//ns:kyKKhaiTuThang").Text
denThang = xmlDoc.SelectSingleNode("//ns:kyKKhaiDenThang").Text
kyKeKhai = "T? tháng " & tuThang & " d?n tháng " & denThang

maGD = xmlDoc.SelectSingleNode("//ns:maGiaoDich").Text
tenCTK = xmlDoc.SelectSingleNode("//ns:tenChuTaiKhoan").Text
soTK = xmlDoc.SelectSingleNode("//ns:taiKhoanSo").Text
tenNH = xmlDoc.SelectSingleNode("//ns:taiNganHang_ten").Text
soDeNghiHoan = xmlDoc.SelectSingleNode("//ns:CTietTTinDNHT[@id='1']/ns:ct6").Text
On Error GoTo 0

With ActiveSheet
.Range("C35").Value = thongTinHoSo ' S? h? so + Ngày l?p
.Range("C22").Value = mst ' Mã s? thu?
.Range("C49").Value = kyKeKhai ' T? tháng - d?n tháng
.Range("D38").Value = soDeNghiHoan ' S? d? ngh? hoàn
.Range("D40").Value = maGD ' Mã giao d?ch
.Range("C43").Value = tenNH ' Ngân hàng
.Range("D41").Value = soTK ' S? tài kho?n
.Range("C42").Value = tenCTK ' Ch? tài kho?n
End With

MsgBox "Ðã ghi d? li?u thành công!", vbInformation
End Sub
 
Hiện tại em có code khi copy tiếng việt vào VBA nhưng lại lỗi font. Anh/chị giúp em vấn đề này với ạ
Bạn nên gắn code vào thẻ code. Còn trong VBE. Không thể viết tiếng việt được. Bạn có thể sử dụng cách khác để làm. Chẳng hạn lấy biến từ sheet hoặc dùng Unicode để viết Tiếng Việt nhé
 
Upvote 0
Bạn nên gắn code vào thẻ code. Còn trong VBE. Không thể viết tiếng việt được. Bạn có thể sử dụng cách khác để làm. Chẳng hạn lấy biến từ sheet hoặc dùng Unicode để viết Tiếng Việt nhé
Em muốn đưa thẳng số liệu vào cho nhanh nên lấy trực tiếp anh ạ. có cách nào lấy dữ liệu nhanh k ạ
 
Upvote 0
Em muốn đưa thẳng số liệu vào cho nhanh nên lấy trực tiếp anh ạ. có cách nào lấy dữ liệu nhanh k ạ
Bạn hạn chế viết tắt thôi nhé. Nhanh hay chậm là như nào á? Bạn không có file đính kèm nên không biết sửa như nào
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn trên đã bảo gửi file cụ thể lên, mà ở đây có lẽ cần 2 file, một là file xml, hai là file excel chứa kết quả và cần một ví dụ kết quả mong muốn vào file excel. Vậy mà trả lời mỗi câu "xml của thuế" thì làm khó cho người định giúp rồi.
 
Upvote 0
Bạn trên đã bảo gửi file cụ thể lên, mà ở đây có lẽ cần 2 file, một là file xml, hai là file excel chứa kết quả và cần một ví dụ kết quả mong muốn vào file excel. Vậy mà trả lời mỗi câu "xml của thuế" thì làm khó cho người định giúp rồi.
Dạ sợ lộ thông tin anh ạ. Anh thông cảm
 
Upvote 0
Không cần file. Đặt các name có các giá trị này rồi dùng chúng.

1751728759416.png
 
Upvote 0
Một ví dụ
Name

1751729166740.png

Xài

1751729185026.png
 
Upvote 0
Đã có đề tài về sử dụng tiếng Việt trong VBA trong diễn đàn rồi. Tạo hàm để convert thôi.
Giả sử muốn Cộng hòa xã hội chủ nghĩa Việt Nam thì dùng hàm vietnamese("Coojng hofa xax hooji chur nghixa Vieejt Nam")
Code như dưới
Mã:
Function UniConvert(text As String, InputMethod As String) As String
Dim VNI_Type, Telex_Type, CharCode, Temp, i As Long
UniConvert = text
VNI_Type = Array("a81", "a82", "a83", "a84", "a85", "a61", "a62", "a63", "a64", "a65", "e61", _
"e62", "e63", "e64", "e65", "o61", "o62", "o63", "o64", "o65", "o71", "o72", "o73", "o74", _
"o75", "u71", "u72", "u73", "u74", "u75", "a1", "a2", "a3", "a4", "a5", "a8", "a6", "d9", _
"e1", "e2", "e3", "e4", "e5", "e6", "i1", "i2", "i3", "i4", "i5", "o1", "o2", "o3", "o4", _
"o5", "o6", "o7", "u1", "u2", "u3", "u4", "u5", "u7", "y1", "y2", "y3", "y4", "y5")
Telex_Type = Array("aws", "awf", "awr", "awx", "awj", "aas", "aaf", "aar", "aax", "aaj", "ees", _
"eef", "eer", "eex", "eej", "oos", "oof", "oor", "oox", "ooj", "ows", "owf", "owr", "owx", _
"owj", "uws", "uwf", "uwr", "uwx", "uwj", "as", "af", "ar", "ax", "aj", "aw", "aa", "dd", _
"es", "ef", "er", "ex", "ej", "ee", "is", "if", "ir", "ix", "ij", "os", "of", "or", "ox", _
"oj", "oo", "ow", "us", "uf", "ur", "ux", "uj", "uw", "ys", "yf", "yr", "yx", "yj")
CharCode = Array(ChrW(7855), ChrW(7857), ChrW(7859), ChrW(7861), ChrW(7863), ChrW(7845), ChrW(7847), _
ChrW(7849), ChrW(7851), ChrW(7853), ChrW(7871), ChrW(7873), ChrW(7875), ChrW(7877), ChrW(7879), _
ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), ChrW(7901), ChrW(7903), _
ChrW(7905), ChrW(7907), ChrW(7913), ChrW(7915), ChrW(7917), ChrW(7919), ChrW(7921), ChrW(225), _
ChrW(224), ChrW(7843), ChrW(227), ChrW(7841), ChrW(259), ChrW(226), ChrW(273), ChrW(233), ChrW(232), _
ChrW(7867), ChrW(7869), ChrW(7865), ChrW(234), ChrW(237), ChrW(236), ChrW(7881), ChrW(297), ChrW(7883), _
ChrW(243), ChrW(242), ChrW(7887), ChrW(245), ChrW(7885), ChrW(244), ChrW(417), ChrW(250), ChrW(249), _
ChrW(7911), ChrW(361), ChrW(7909), ChrW(432), ChrW(253), ChrW(7923), ChrW(7927), ChrW(7929), ChrW(7925))
Select Case InputMethod
Case Is = "VNI": Temp = VNI_Type
Case Is = "Telex": Temp = Telex_Type
End Select
For i = 0 To UBound(CharCode)
UniConvert = Replace(UniConvert, Temp(i), CharCode(i))
UniConvert = Replace(UniConvert, UCase(Temp(i)), UCase(CharCode(i)))
Next i
End Function

Public Function vietnamese(inputText As String) As String
vietnamese = UniConvert(inputText, "Telex")
End Function
 
Upvote 0
Đã có đề tài về sử dụng tiếng Việt trong VBA trong diễn đàn rồi. Tạo hàm để convert thôi.
Giả sử muốn Cộng hòa xã hội chủ nghĩa Việt Nam thì dùng hàm vietnamese("Coojng hofa xax hooji chur nghixa Vieejt Nam")
Code như dưới
Mã:
Function UniConvert(text As String, InputMethod As String) As String
Dim VNI_Type, Telex_Type, CharCode, Temp, i As Long
UniConvert = text
VNI_Type = Array("a81", "a82", "a83", "a84", "a85", "a61", "a62", "a63", "a64", "a65", "e61", _
"e62", "e63", "e64", "e65", "o61", "o62", "o63", "o64", "o65", "o71", "o72", "o73", "o74", _
"o75", "u71", "u72", "u73", "u74", "u75", "a1", "a2", "a3", "a4", "a5", "a8", "a6", "d9", _
"e1", "e2", "e3", "e4", "e5", "e6", "i1", "i2", "i3", "i4", "i5", "o1", "o2", "o3", "o4", _
"o5", "o6", "o7", "u1", "u2", "u3", "u4", "u5", "u7", "y1", "y2", "y3", "y4", "y5")
Telex_Type = Array("aws", "awf", "awr", "awx", "awj", "aas", "aaf", "aar", "aax", "aaj", "ees", _
"eef", "eer", "eex", "eej", "oos", "oof", "oor", "oox", "ooj", "ows", "owf", "owr", "owx", _
"owj", "uws", "uwf", "uwr", "uwx", "uwj", "as", "af", "ar", "ax", "aj", "aw", "aa", "dd", _
"es", "ef", "er", "ex", "ej", "ee", "is", "if", "ir", "ix", "ij", "os", "of", "or", "ox", _
"oj", "oo", "ow", "us", "uf", "ur", "ux", "uj", "uw", "ys", "yf", "yr", "yx", "yj")
CharCode = Array(ChrW(7855), ChrW(7857), ChrW(7859), ChrW(7861), ChrW(7863), ChrW(7845), ChrW(7847), _
ChrW(7849), ChrW(7851), ChrW(7853), ChrW(7871), ChrW(7873), ChrW(7875), ChrW(7877), ChrW(7879), _
ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), ChrW(7901), ChrW(7903), _
ChrW(7905), ChrW(7907), ChrW(7913), ChrW(7915), ChrW(7917), ChrW(7919), ChrW(7921), ChrW(225), _
ChrW(224), ChrW(7843), ChrW(227), ChrW(7841), ChrW(259), ChrW(226), ChrW(273), ChrW(233), ChrW(232), _
ChrW(7867), ChrW(7869), ChrW(7865), ChrW(234), ChrW(237), ChrW(236), ChrW(7881), ChrW(297), ChrW(7883), _
ChrW(243), ChrW(242), ChrW(7887), ChrW(245), ChrW(7885), ChrW(244), ChrW(417), ChrW(250), ChrW(249), _
ChrW(7911), ChrW(361), ChrW(7909), ChrW(432), ChrW(253), ChrW(7923), ChrW(7927), ChrW(7929), ChrW(7925))
Select Case InputMethod
Case Is = "VNI": Temp = VNI_Type
Case Is = "Telex": Temp = Telex_Type
End Select
For i = 0 To UBound(CharCode)
UniConvert = Replace(UniConvert, Temp(i), CharCode(i))
UniConvert = Replace(UniConvert, UCase(Temp(i)), UCase(CharCode(i)))
Next i
End Function

Public Function vietnamese(inputText As String) As String
vietnamese = UniConvert(inputText, "Telex")
End Function
Rồi bạn cho 1 đoạn ví dụ xem thử giống như mong muốn của chủ thớt đi, để cho mình học cách làm với. Cũng đang bí vụ này
 
Upvote 0
Rồi bạn cho 1 đoạn ví dụ xem thử giống như mong muốn của chủ thớt đi, để cho mình học cách làm với. Cũng đang bí vụ này
Mình không rõ ý của chủ thớt như thế nào nhưng nếu muốn thay đổi những chỗ cần có Tiếng Việt thì gõ theo công thức gõ Telex như bình thường là được. Dưới đây là ví dụ sau khi áp dụng đoạn Function của bạn phía trên nhé.

1753928314557.png
 
Upvote 0
Mình không rõ ý của chủ thớt như thế nào nhưng nếu muốn thay đổi những chỗ cần có Tiếng Việt thì gõ theo công thức gõ Telex như bình thường là được. Dưới đây là ví dụ sau khi áp dụng đoạn Function của bạn phía trên nhé.

View attachment 309078
Ý của chủ thớt và mình là thể hiện tiếng việt có dấu trong cửa sổ viết code đấy. Không phải là thành phẩm. Viết code và chú thích tiếng việt kế bên thì sau này cần sửa code sẽ đở vất vả chút
 
Upvote 0
Ý của chủ thớt và mình là thể hiện tiếng việt có dấu trong cửa sổ viết code đấy. Không phải là thành phẩm. Viết code và chú thích tiếng việt kế bên thì sau này cần sửa code sẽ đở vất vả chút
Cái này nhiều bạn cũng biết rồi mình nhắc lại thôi. Chỉnh font hiển thị của Vba về .vntime, viết code thì chỉnh unikey về TCVN. Dùng hàm đổi font từ TCVN sang Unicode để có hiển thị trong excel là Unicode.
 
Upvote 0
Dùng Add-in VBA_FastCode cho VBE để viết tiếng Việt trong code cho dễ bạn nhé, hơi đâu chuyển kiểu này kiểu kia, giờ đây đã chuẩn hóa kiểu gõ Telex trên toàn quốc rồi.
 
Upvote 0
Cái này nhiều bạn cũng biết rồi mình nhắc lại thôi. Chỉnh font hiển thị của Vba về .vntime, viết code thì chỉnh unikey về TCVN. Dùng hàm đổi font từ TCVN sang Unicode để có hiển thị trong excel là Unicode.
Tôi giờ quên sạch font .Vnxxx rồi. Giờ là chuẩn Unicode, công cụ hướng dẫn chuyển đổi đầy rồi. Chịu khó mày mò trong GPE hoặc hỏi AI là ra.
 
Upvote 0
Tôi giờ quên sạch font .Vnxxx rồi. Giờ là chuẩn Unicode, công cụ hướng dẫn chuyển đổi đầy rồi. Chịu khó mày mò trong GPE hoặc hỏi AI là ra.
Một số ông cần, chứ tôi cũng có quan tâm đến cái đó nữa đâu. Các ông ấy dùng nhiều mới cần mới phải tìm hiểu. Tôi thì không chuyên, thỉnh thoảng dùng vba thì toàn ghi macrro rồi sửa nên sử dụng cách giản đơn nhất, sẵn có không phải tool nào nữa cả.
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu chỉ cần viết ghi chú tiếng Việt trong VBA thì mình xài tiếng Việt lộn xộn như vầy cũng đỡ:
PHP:
'Tìm Dòng Cuôi Cua Du Liêu:  '
' Thoát Vòng Lap Có Diều Kiên: '
'Nguòi Khác Doc Mà Không Hiêu Thì MacKeNo!  '
. . . . .
 
Upvote 0
Quyết định cuối cùng là chẳng thèm ghi chú chi cho mệt. Lúc nào cần sửa thì chịu khó mò mẫm
Bài đã được tự động gộp:

 
Upvote 0
Quyết định cuối cùng là chẳng thèm ghi chú chi cho mệt. Lúc nào cần sửa thì chịu khó mò mẫm
Sửa code của mình thì còn mò ra, code của người viết kha khá còn mò ra, chứ code người học sơ cấp mà viết lằng nhằng thì chịu thua. Thà viết lại toàn bộ.
 
Upvote 0
Nếu chỉ cần viết ghi chú tiếng Việt trong VBA thì mình xài tiếng Việt lộn xộn như vầy cũng đỡ:
PHP:
'Tìm Dòng Cuôi Cua Du Liêu:  '
' Thoát Vòng Lap Có Diều Kiên: '
'Nguòi Khác Doc Mà Không Hiêu Thì MacKeNo!  '
. . . . .
Đồng ý với bác Sa. Tôi cũng viết lộn xộn như vậy và chắc chắn là ai cũng đọc được. Ghi chú chứ có phải viết tiểu thuyết đâu mà cần nhiều chữ nghĩa.
 
Upvote 0

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

Back
Top Bottom