Cách đánh TIẾNG VIỆT (Có dấu) trong cửa số soạn thảo VBA

Liên hệ QC

hoacomay8x

Thành viên mới
Tham gia
2/8/11
Bài viết
33
Được thích
6
Nghề nghiệp
Là kế toán viên
Chào các thành viên GPE.
Em mới chập chững học về VBA.
Em xin thình giáo các bác một vấn để: Làm thế nào để đánh được TIẾNG VIỆT (có dấu) ở trong của số của Microshoft Visual Basic.
Ví dụ:
If OptionNu Then Cells(NextRow, 2) = "Nu"

Em muốn đánh là chữ Nữ

Hoặc trong các phần chú thích em muốn đánh TIẾNG VIỆT
 
Em làm theo thầy, Msgbox tạo ra trông rất bài bản đẹp như mơ luôn thầy ơi. Em cám ơn thầy nhiều lắm.

Cái code 2 em sửa thế này

Mã:
Dim SoTo As Variant, [COLOR=#b22222]Text As String[/COLOR], default
        default = "1"
        [COLOR=#b22222]Text = "Hay4 nha65p so61 to72 nha65p xong click OK ma85c d9inh la2 1 to72"
    SoTo = InputBox(Application.hwnd, StrPtr(UniConvert(Text, "VNI")), StrPtr("THÔNG BÁO"), default)[/COLOR]
    If SoTo = "" Then
        Sheets(23).Select

Không biết em sai sót thế nào làm cho Inputbox chỉ hiện toàn số không có chữ nào hết, mặc định = 1 trong Inputbox cũng sai theo.

View attachment 145507

Em xin thầy giúp em lần nữa nhé.

Ủa? Bài tôi hướng dẫn là tiếng Việt cho MsgBox, có chỗ nào nói đến InputBox đâu ta?
 
Lần chỉnh sửa cuối:
Upvote 0
Thầy ơi em muốn áp dụng bài hướng dẫn Msgbox của Thầy cho Inputbox nhưng không thành công, xin thầy giúp em nhé cám ơn Thầy trước nhé! .
 
Upvote 0
Upvote 0
Upvote 0
Thầy ơi em muốn áp dụng bài hướng dẫn Msgbox của Thầy cho Inputbox nhưng không thành công, xin thầy giúp em nhé cám ơn Thầy trước nhé! .

Hic! Nó thế này:
Mã:
 Dim SoTo As Variant, Text As String
 Const default = 1
 Text = "Ha4y nha65p so61 to72 nha65p xong click OK ma85c d9inh la2 1 to72"
 SoTo = Application.InputBox(UniConvert(Text, "VNI"), "THÔNG BÁO", default, Type:=1)
 If SoTo = "False" Then Sheets(23).Select
 
Upvote 0
không biết có lạc đề không.
cái này em chỉnh sửa lại 1 chút để cho tiện khỏi gõ hàm này kia thôi
bạn thêm add ins này vô nha
sau đó đánh chữ tiếng việt vào ô nào đó
nhấn phím tắt Ctrl+Shift+C rồi dán vào chỗ nào bạn cần hiển thị tiếng việt trong cửa sô VBA thôi. khỏi phải lằng hoằng gõ hàm rồi copy này nọ mấy bước
nguồn : Nguyễn Duy Tuân
 

File đính kèm

  • Func_UniVba.xlam
    18.2 KB · Đọc: 54
Upvote 0
Hic! Nó thế này:
Mã:
 Dim SoTo As Variant, Text As String
 Const default = 1
 Text = "Ha4y nha65p so61 to72 nha65p xong click OK ma85c d9inh la2 1 to72"
 SoTo = Application.InputBox(UniConvert(Text, "VNI"), "THÔNG BÁO", default, Type:=1)
 If SoTo = "False" Then Sheets(23).Select

Chính xác rồi Thầy ơi! thích quá. Nhờ Thầy người dùng xem Msgbox và Inputbox của em viết đỡ mất thời gian và mở to đôi mắt suy ngẩm xem thông báo không có dấu đó viết cái gì. Một lần nữa em xin cám ơn thầy rất nhiều.

À Thầy ơi em xin hỏi phụ thêm một ý(phần này chỉ là câu hỏi phụ nếu Thầy thấy em hỏi thừa Thầy cho qua luôn): trong trường hợp người dùng xóa số tờ mặc định trong Inputbox nhưng lại quên nhập số tờ cần in, click OK sẽ ra thông báo lỗi của Excel

ThongBaoExcel.jpg

Vậy Thầy có thể thêm vào một Msgbox Thông Báo "Bạn chưa nhập số tờ cần in" thay thế cho cái thông báo lỗi của Excel không ?
 
Upvote 0
Chính xác rồi Thầy ơi! thích quá. Nhờ Thầy người dùng xem Msgbox và Inputbox của em viết đỡ mất thời gian và mở to đôi mắt suy ngẩm xem thông báo không có dấu đó viết cái gì. Một lần nữa em xin cám ơn thầy rất nhiều.

À Thầy ơi em xin hỏi phụ thêm một ý(phần này chỉ là câu hỏi phụ nếu Thầy thấy em hỏi thừa Thầy cho qua luôn): trong trường hợp người dùng xóa số tờ mặc định trong Inputbox nhưng lại quên nhập số tờ cần in, click OK sẽ ra thông báo lỗi của Excel

View attachment 145561

Vậy Thầy có thể thêm vào một Msgbox Thông Báo "Bạn chưa nhập số tờ cần in" thay thế cho cái thông báo lỗi của Excel không ?

Sửa code thành vầy xem:
Mã:
  Dim SoTo, Text As String
  Const default = 1
  Text = "Ha4y nha65p so61 to72 nha65p xong click OK ma85c d9inh la2 1 to72"
  SoTo = Application.InputBox(UniConvert(Text, "VNI"), "THÔNG BÁO", default)
  If SoTo = "False" Then
    Sheets(23).Select
  ElseIf SoTo = "" Then
    MsgBox "Chua nhap so to"
  Else
    ''Làm gì nữa tùy bạn
  End If
 
Lần chỉnh sửa cuối:
Upvote 0
Sửa code thành vầy xem:
Mã:
  Dim SoTo, Text As String
  Const default = 1
  Text = "Ha4y nha65p so61 to72 nha65p xong click OK ma85c d9inh la2 1 to72"
  SoTo = Application.InputBox(UniConvert(Text, "VNI"), "THÔNG BÁO", default)
  If SoTo = "False" Then
    Sheets(23).Select
  ElseIf SoTo = "" Then
    MsgBox "Chua nhap so to"
  Else
    ''Làm gì nữa tùy bạn
  End If

Dạ đúng rồi Thầy ơi nhưng hình như còn thiếu một đoạn code cho hiện Inputbox sau khi click nút OK của Msgbox " Chua nhap so to"

Ví dụ thêm dòng màu đỏ

Mã:
  Dim SoTo, Text As String
  Const default = 1
  Text = "Ha4y nha65p so61 to72 nha65p xong click OK ma85c d9inh la2 1 to72"
  SoTo = Application.InputBox(UniConvert(Text, "VNI"), "THÔNG BÁO", default)
  If SoTo = "False" Then
    Sheets(23).Select
  ElseIf SoTo = "" Then
    MsgBox "Chua nhap so to"
    [COLOR=#ff0000]SoTo = Application.InputBox(UniConvert(Text, "VNI"), "THÔNG BÁO", default)[/COLOR]
  Else
    ''Làm gì nữa tùy bạn
  End If
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ đúng rồi Thầy ơi nhưng hình như còn thiếu một đoạn code cho hiện Inputbox sau khi click nút OK của Msgbox " Chua nhap so to"

Ví dụ thêm dòng màu đỏ

Mã:
  Dim SoTo, Text As String
  Const default = 1
  Text = "Ha4y nha65p so61 to72 nha65p xong click OK ma85c d9inh la2 1 to72"
  SoTo = Application.InputBox(UniConvert(Text, "VNI"), "THÔNG BÁO", default)
  If SoTo = "False" Then
    Sheets(23).Select
  ElseIf SoTo = "" Then
    MsgBox "Chua nhap so to"
    [COLOR=#ff0000]SoTo = Application.InputBox(UniConvert(Text, "VNI"), "THÔNG BÁO", default)[/COLOR]
  Else
    ''Làm gì nữa tùy bạn
  End If

Vậy đâu có được!
Nếu đến lần thứ 2, người dùng cũng lại xóa số "1" mặc định và bấm Enter nữa thì.. sao đây? Thử suy nghĩ xem! --=0
 
Upvote 0
Nếu là vậy em chỉ có thể viết thông báo nhắc nhở chi tiết hơn thôi , nếu vẫn còn xoá rồi Ok em đành bó tay rồi Thầy.!$@!!

Code em sửa như vầy
Mã:
Dim SoTo, Text1 As String, Text2 As String, default
 default = 1
  Text1 = "Ha4y nha65p so61 to72 nha65p xong click OK ma85c d9inh la2 1 to72"
  SoTo = Application.InputBox(UniConvert(Text1, "VNI"), "THÔNG BÁO", default)
  If SoTo = "False" Then
    Sheets(23).Select
    Exit Sub
  ElseIf SoTo = "" Then
    Text2 = "Ba5n chu7a nha65p so61 to72 hãy nha65p la5i"
    MessageBox Application.hwnd, StrPtr(UniConvert(Text2, "VNI")), StrPtr("THÔNG BÁO"), vbOKOnly
    default = "hay nhap so to vao day !"
    SoTo = Application.InputBox(UniConvert(Text2, "VNI"), "THÔNG BÁO", default)
  Else
    ''Làm gì nữa tùy bạn
  End If
 
Upvote 0
Nếu là vậy em chỉ có thể viết thông báo nhắc nhở chi tiết hơn thôi , nếu vẫn còn xoá rồi Ok em đành bó tay rồi Thầy.!$@!!

Code em sửa như vầy
Mã:
Dim SoTo, Text1 As String, Text2 As String, default
 default = 1
  Text1 = "Ha4y nha65p so61 to72 nha65p xong click OK ma85c d9inh la2 1 to72"
  SoTo = Application.InputBox(UniConvert(Text1, "VNI"), "THÔNG BÁO", default)
  If SoTo = "False" Then
    Sheets(23).Select
    Exit Sub
  ElseIf SoTo = "" Then
    Text2 = "Ba5n chu7a nha65p so61 to72 hãy nha65p la5i"
    MessageBox Application.hwnd, StrPtr(UniConvert(Text2, "VNI")), StrPtr("THÔNG BÁO"), vbOKOnly
    default = "hay nhap so to vao day !"
    SoTo = Application.InputBox(UniConvert(Text2, "VNI"), "THÔNG BÁO", default)
  Else
    ''Làm gì nữa tùy bạn
  End If

Cho cái Application.InputBox vào vòng lập Do.. Loop, "ép" người ta phải nhập số tờ (hoặc bấm Cancel). Nếu cố tính xóa số tờ thì vòng lập cứ tiếp tục đến khi nào thỏa điều kiện "ép" mới thôi
---------------
Đến đây thì câu hỏi không còn liên quan đến "Tiếng Việt" nữa. Nếu bạn vẫn còn thắc mắc, vui lòng mở topic mới hỏi nhé!
Có thể đăng bài vào đây cũng được:
http://www.giaiphapexcel.com/forum/...Chuyên-đề-giải-đáp-những-thắc-mắc-về-code-VBA
 
Upvote 0
Cho cái Application.InputBox vào vòng lập Do.. Loop, "ép" người ta phải nhập số tờ (hoặc bấm Cancel). Nếu cố tính xóa số tờ thì vòng lập cứ tiếp tục đến khi nào thỏa điều kiện "ép" mới thôi
---------------
Đến đây thì câu hỏi không còn liên quan đến "Tiếng Việt" nữa. Nếu bạn vẫn còn thắc mắc, vui lòng mở topic mới hỏi nhé!
Có thể đăng bài vào đây cũng được:
http://www.giaiphapexcel.com/forum/...Chuyên-đề-giải-đáp-những-thắc-mắc-về-code-VBA

Thầy ơi! nhờ Thầy "soi sáng" em viết thành công "ép" người ta phải nhập số tờ (hoặc bấm Cancel) rồi @$@!^%, đúng là "Không thầy đố mày làm nên", em cám ơn thấy rất rất nhiều.
Link này Thầy xem đúng chưa nhé
http://www.giaiphapexcel.com/forum/...hững-thắc-mắc-về-code-VBA&p=667870#post667870
 
Upvote 0
Tốt nhất bạn đừng nghe lời ai mà chỉnh sửa bậy bạ hệ thống
Nên nhớ rằng việc chỉnh như vậy có ảnh hướng đến mọi phần mềm chứ không riêng gì Excel ---> Nó sẽ gây rắc rối cho bạn dài dài
Riêng Excel, nếu muốn dùng MsgBox tiếp Việt Unicode thì có hàng đóng cách
Trước tiên dùng 1 hàm hổ trợ:
PHP:
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
Tiếp theo dùng 1 trong các cách sau:
1> Cách 1: Dùng hàm Macro 4
PHP:
Sub Test1()
  Dim Text As String
  Text = "Gia1 tri5 nha65p vu7o75t quá 3 ro62i"
  If Range("B3").Value > 3 Then
    Application.ExecuteExcel4Macro ("ALERT(""" & UniConvert(Text, "VNI") & """,2)")
  End If
End Sub
2> Cách 2: Dùng DoAlert Method
PHP:
Sub Test2()
  Dim Text As String
  Text = "Gia1 tri5 nha65p vu7o75t quá 3 ro62i"
  If Range("B3").Value > 3 Then
    Application.Assistant.DoAlert "THÔNG BÁO", UniConvert(Text, "VNI"), 0, 4, 0, 0, 0
  End If
End Sub
3> Cách 3: Dùng WScript.Shell
PHP:
Sub Test3()
  Dim Text As String
  Text = "Gia1 tri5 nha65p vu7o75t quá 3 ro62i"
  If Range("B3").Value > 3 Then
    CreateObject("WScript.Shell").Popup UniConvert(Text, "VNI"), , "THÔNG BÁO", vbOKOnly
  End If
End Sub
4> Cách 4: Dùng Windows MsgBox (hàm API)
PHP:
Declare Function MessageBox Lib "user32" Alias "MessageBoxW" (ByVal hwnd As Long, ByVal lpText As Long, ByVal lpCaption As Long, ByVal wType As Long) As Long
Sub Test4()
  Dim Text As String
  Text = "Gia1 tri5 nha65p vu7o75t quá 3 ro62i"
  If Range("B3").Value > 3 Then
    MessageBox Application.hwnd, StrPtr(UniConvert(Text, "VNI")), StrPtr("THÔNG BÁO"), vbOKOnly
  End If
End Sub
Lưu ý về biến Text... Đây là cách gõ bàn phím thông thường. Với kiểu gõ VNI, nếu muốn gõ chữ Giá trị nhập vượt quá 3 rồi có phải ta sẽ gõ Gia1 tri5 nha65p vu7o75t quá 3 ro62i không? ---> Hàm Uniconvert sẽ chuyển cách gõ Gia1 tri5 nha65p vu7o75t quá 3 ro62i thành đúng tiếng Việt
Làm thế nào để gõ chữ Gia1 tri5 nha65p vu7o75t quá 3 ro62i ạ? Em loay hoay mãi mà không biết làm thế nào để gõ được.
 
Upvote 0
Ý em không phải là gõ trực tiếp trên phím, như thế tẩu hỏa nhập ma mất vì em quen đánh kiểu Telex rồi.
Chính vì quen gõ kiểu Telex nên khi gõ vào Excel kiểu chữ Telex xong, sau đó thông qua một hàm nào đó convert từ chữ Telex về chữ VNI cho tiện ạ.
Ví dụ: Em đi học về => Em d9i ho5c ve62
Hiện giờ em cũng đã tìm được 1 hàm như thế rồi.
 
Upvote 0
Ý em không phải là gõ trực tiếp trên phím, như thế tẩu hỏa nhập ma mất vì em quen đánh kiểu Telex rồi.
Chính vì quen gõ kiểu Telex nên khi gõ vào Excel kiểu chữ Telex xong, sau đó thông qua một hàm nào đó convert từ chữ Telex về chữ VNI cho tiện ạ.
Ví dụ: Em đi học về => Em d9i ho5c ve62
Hiện giờ em cũng đã tìm được 1 hàm như thế rồi.
Chi vậy cho mệt, nếu đã Telex thì gõ vầy cũng được mà.
Mã:
Application.InputBox(UniConvert("Em ddi hojc veef", "Telex"), "THÔNG BÁO", default)
 
Upvote 0
Ý em không phải là gõ trực tiếp trên phím, như thế tẩu hỏa nhập ma mất vì em quen đánh kiểu Telex rồi.
Chính vì quen gõ kiểu Telex nên khi gõ vào Excel kiểu chữ Telex xong, sau đó thông qua một hàm nào đó convert từ chữ Telex về chữ VNI cho tiện ạ.
Ví dụ: Em đi học về => Em d9i ho5c ve62
Hiện giờ em cũng đã tìm được 1 hàm như thế rồi.
Hàm Uniconvert tôi viết cho phép 2 tùy chọn là Telex hoặc VNI mà bạn nói gì lạ vậy? Chắc không có đọc code rồi
 
Upvote 0
Web KT

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

Back
Top Bottom