Hỗ trợ tiếng việt trong macro (2 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

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

Back
Top Bottom