CODE Tự động chuyển chữ thường thành chữ HOA khi nhập dữ liệu trong Excel


Private Sub Worksheet_Change(ByVal Target As Range)
””””””””””””””””””””””
‘Forces text to Proper case for the range A1:B20 Viet hoa chu cai dau tien
””””””””””””””””””””””
If Target.Cells.Count > 1 Or Target.HasFormula Then Exit Sub
On Error Resume Next
If Not Intersect(Target, Range(“A1:B20”)) Is Nothing Then
Application.EnableEvents = False
Target = StrConv(Target, vbUpperCase)
‘Target.Value = LCase(Target.Value)
Application.EnableEvents = True
End If
On Error GoTo 0
End Sub

Giải thích:

Tên hàm: StrConv
StrConv(string, conversion, LCID)
Chuyển chuỗi string sang một định dạng khác (ví dụ Unicode)
Tham số:
string
Chuỗi cần chuyển
conversion
Chế độ muốn chuyển
Ghi chú:
Dung cho tham so conversion
vbUpperCase = 1 Chuyển sang chữ hoa
vbLowerCase = 2 Chuyển sang chữ thường
vbProperCase 3 Chuyển sang chế độ viết hoa chữ cái đầu tiên của mỗi từ
vbWide* = 4* Chuyển từ narrow (single-byte) characters sang wide (double-byte) characters.
vbNarrow* = 8* Chuyển từ wide (double-byte) characters sang narrow (single-byte) characters.
vbKatakana** = 16** Chuyển từ Hiragana characters sang Katakana characters.
vbHiragana** = 32** Chuyển từ Katakana characters sang Hiragana characters.
vbUnicode = 64 Chuyển sang chế độ Unicode sử dụng code mặc định của hệ thống
vbFromUnicode = 128 
Chuyển từ Unicode sang mã mặc định của hệ thống

Application.EnableEvents thường dùng cho các sự kiện, tiêu biểu là sự kiện WorksheetChange
Ví dụ:
– Bạn muốn nhập số 1 vào cell A1 thì lập tức A1 biến thành 10 (chẳng hạn). Hay nói đúng hơn là bạn muốn kết quả = 10 lần giá trị nhập
– Trường hợp này ta dùng sự kiện WorksheetChange với Target = Range(“A1”)
– Code viết cũng đơn giản, kiểu như Target = Target*10 (đúng chứ?)
– Thế nhưng ngay khi ta gõ số 1 thì code biến số 1 thành số 10 (bằng phép nhân), đồng thời nó cũng nhận biết được có sự thay đổi trên cell A1 nên code lại chạy và lại biến số 10 thành số 100 (nhân 10 tiếp) —> Cứ thế chẳng biết đến khi nào mới dừng
—————–
Vậy: Đối với trường hợp dùng sự kiện WorksheetChange thực hiện thay đổi ngay tại Target (là cell ta nhập) thì BẮT BUỘC phải có cặp Application.EnableEvents = FALSE ở đầu code và Application.EnableEvents = TRUE ở cuối code. Mục đích để “bắt” sự kiện change 1 lần duy nhất —> Nhập số 1, biến thành 10 rồi thôi (hổng nhân nữa)
—————-

Advertisements
%d bloggers like this: