Tự động đổi chữ thường ra chữ hoa sau khi nhập liệu

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

jackylai

Thành viên mới
Tham gia
26/11/07
Bài viết
19
Được thích
5
Dear all,
Mình có một vấn đề rất mong anh chị em trong diễn đàn giúp đỡ:
Mình có một range (vd: A1:A10) trong Sheet1 và muốn mỗi lần nhập liệu vào bất kỳ cell nào trong range này dữ liệu sẽ tự động được chuyển từ chữ thường sang chữ in hoa.
Rất mong nhận được sự giúp đỡ.
(Đã dùng hướng dẫn trong thread này: http://www.giaiphapexcel.com/forum/showthread.php?3239 nhưng không có tác dụng)
 
dạ, Thầy cho em hỏi sử dụng hàm này như thế nào ạ? Em muốn sử dụng cho việc nhập họ tên ở cột C từ ô C5:C250 trong sheet1 ạ?
Đừng gọi Thầy, gọi anh cũng được rồi (cho thấy trẻ).
Ý bạn là muốn nhập xong thì nó tự chỉnh sửa hay trình tự thao tác như thế nào?

NFnnOL6.png
 
Lần chỉnh sửa cuối:
Upvote 0
Xin cảm ơn các thầy đã giúp đỡ! Em mày mò chắp vá cũng ra được cái này rồi ạ!
Không nên gọi là thầy nhé.
Code của bạn vòng vèo quá, nhưng chạy được là tốt rồi, file của mình trên máy tính bạn chạy có vấn đề gì giống như của ongke0711 không?
File của bạn nên tạo Userform nhập liệu sẽ nhanh và chính xác hơn nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
Em dùng Office 2021 (32bit), chạy bình thường không thấy bị sao mới dám gửi lên anh ạ.
Máy tôi nó phản ứng lạ quá. Win11 + O365 bản quyền.
Sự kiện trong Sheet Excel không rành nên khó bắt sự kiện AfterUpdate và OnExit như trên Form.
Code này của tôi phải bấm quay ngược lại cái Cell vừa gõ nó mới cập nhật.

JavaScript:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim oldCellText As String
    Dim intersectRange As Range
    Dim lastRow As Long
    Const targetCol As String = "C"
    Const startRow As Long = 2
    
    lastRow = Cells(Rows.Count, targetCol).End(xlUp).Row
    Set intersectRange = Range(targetCol & startRow & ":" & targetCol & lastRow + 1)
    
    If Not Intersect(Target, intersectRange) Is Nothing Then
        On Error Resume Next
        oldCellText = Target.Value
        Target.Value = QuyChuanHoTen(oldCellText)
    End If
    
End Sub

Lỗi khi sử dụng file của bạn Tuấn 686:

 
Lần chỉnh sửa cuối:
Upvote 0
Không nên gọi là thầy nhé.
Code của bạn vòng vèo quá, nhưng chạy được là tốt rồi, file của mình trên máy tính bạn chạy có vấn đề gì giống như của ongke0711 không?
File của bạn nên tạo Userform nhập liệu sẽ nhanh và chính xác hơn nhiều.
dạ, file của anh em chạy trên máy em chạy ok ạ nhưng không xóa khoảng trắng từ 2 khoảng trắng trở lên ạ
 
Upvote 0

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Nhìn bài bạn Tuấn 868 mới ngộ ra cách dùng ActiveCell...:D.

JavaScript:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim oldCellText As String
    Dim intersectRange As Range
    Dim lastRow As Long
    Const targetCol As String = "C"
    Const startRow As Long = 2
    
    lastRow = Cells(Rows.Count, targetCol).End(xlUp).Row
    Set intersectRange = Range(targetCol & startRow & ":" & targetCol & lastRow + 1)
    
    If Not Intersect(Target, intersectRange) Is Nothing Then
        On Error Resume Next
        oldCellText = ActiveCell.Offset(-1, 0)
        ActiveCell.Offset(-1, 0) = QuyChuanHoTen(oldCellText)
    End If
    
End Sub
Bài đã được tự động gộp:

@Hoàng Tuấn 868 : tại sao bạn dùng WS_Change mà không dùng WS_SelectionChange?
 
Lần chỉnh sửa cuối:
Upvote 0
Nhìn bài bạn Tuấn 868 mới ngộ ra cách dùng ActiveCell...:D.
Mã:
...
    If Not Intersect(Target, intersectRange) Is Nothing Then
        On Error Resume Next
        oldCellText = ActiveCell.Offset(-1, 0)
        ActiveCell.Offset(-1, 0) = QuyChuanHoTen(oldCellText)
    End If
End Sub
Bài đã được tự động gộp:

@Hoàng Tuấn 868 : tại sao bạn dùng WS_Change mà không dùng WS_SelectionChange?
1. Tôi chưa hiểu tại sao dùng ActiveCell.
Theo code thì bạn măc định rằng người dùng đã 'Enter'. Trên thực tế người ta vẫn có thể đã 'Tab'
2. dùng WS_Change mà không dùng WS_SelectionChange?
ngoài việc khác sự kiện, điểm chính là Target. Với cách thứ nhất Target là ô mới vừa được sửa. Với cách thứ hai, Target là ô mới vừa được chọn (với cửa/enter thì nó là ô dưới ô vừa được sửa).

Đừng gọi Thầy, gọi anh cũng được rồi (cho thấy trẻ).
...
Không nên gọi là thầy nhé.
...
Tôi lại ao ước người ta gọi mình là Thầy. Và theo trào lưu thích thích gì đó, tôi chọn cái tên Thầy Thích Nón Gai cho nó bình dân.
 
Upvote 0
Trên thực tế người ta vẫn có thể đã 'Tab'
Bẫy lỗi {TAB} này cũng căng à anh...Đã có Tab thì cũng có mũi tên trái phải, lên xuống...
Thêm cái code này mà chạy chưa được.

Mã:
With Application
   .OnKey "{TAB}", "quyChuanHoTen_ex"
   Exit Sub
End With
 
Lần chỉnh sửa cuối:
Upvote 0
File đính kèm cũng tạm xử lý được phím {TAB} nhưng giải thuật này vẫn bị phải bấm phím {Enter} hoặc {Tab} 2 lần nó mới di chuyển... :D .
Thôi bỏ cuộc vậy.

JavaScript:
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim intersectRange As Range
    Dim lastRow As Long
    Const targetCol As String = "C"
    Const startRow As Long = 2

    lastRow = Cells(Rows.Count, targetCol).End(xlUp).Row
    Set intersectRange = Range(targetCol & startRow & ":" & targetCol & lastRow + 1)

    If Not Intersect(Target, intersectRange) Is Nothing Then
        On Error Resume Next
        Application.OnKey "{RETURN}", "QuyChuanHoTen_ex2"
        Application.OnKey "{TAB}", "QuyChuanHoTen_ex"
    End If
End Sub
 

File đính kèm

Upvote 0
Cái này hay nè, nhớ lúc nhỏ Thầy Cô dạy +-*/ mà thừa thì nhớ tạm đâu đó, thế là em ứng dụng vào luôn.
Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tempO As Range
    Application.EnableEvents = False
    Set tempO = Intersect(Target, Range("c5:c250"))
    If Not tempO Is Nothing Then
        tempO.Value = Application.Trim(Application.Proper(tempO.Value))
    End If
    Application.EnableEvents = True
End Sub
 
Upvote 0
Cần giải thích tại sao dùng Application.Trim mà không dùng Trim của VBA.
Như trên, tại sao dùng Application.Proper mà không dùng StrConv của VBA.

Tôi biết tại sao. Nhưng nếu để người viết code giải thích thì tốt hơn.
 
Upvote 0
Web KT

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

Back
Top Bottom