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)
 
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
Giờ mới biết cái hàm Trim này nó bỏ luôn khoảng trắng dư thừa ở giữa các từ. Trước giờ tôi chỉ dùng nó để bỏ khoảng trắng đầu và cuối chuỗi. Bên Access không có hàm Proper(), phải tự viết hàm này hoặc dùng strConv() và hàm Trim cũng xử lý khác Trim Excel.
 
Upvote 0
Giờ mới biết cái hàm Trim này nó bỏ luôn khoảng trắng dư thừa ở giữa các từ. Trước giờ tôi chỉ dùng nó để bỏ khoảng trắng đầu và cuối chuỗi. Bên Access không có hàm Proper(), phải tự viết hàm này hoặc dùng strConv() và hàm Trim cũng xử lý khác Trim Excel.
Nếu hàm Trim thông thường trong VBA thì chỉ bỏ khoảng trắng thừa hai đầu đoạn văn thôi mà không bỏ được các khoảng trắng thừa bên trong.
Còn lồng hàm Trim theo kiểu đưa từ Excel vào thì nó sẽ có tác dụng với toàn bộ đoạn văn anh ạ.
 
Upvote 0
Viết lại cái hàm giống giống Application.Trim để xài tạm bên Access

Mã:
Function TrimAll(sText As String) As String
    Dim arr() As String, sRet As String, i As Long
    
    arr = Split(sText, " ")
    For i = 0 To UBound(arr)
        If Len(arr(i)) > 0 Then
            sRet = sRet & (arr(i)) & " "
        End If
    Next
    TrimAll = Trim(sRet)
End Function
 
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.
Bác thử cho biết tại sao với, chứ em dùng vì:
1 đơn giản là không biết code sao cho gọn nên cứ dùng hàm bảng tính, tất nhiên dùng kiểu này thì không pờ rồ.
2 là trim thì nó không chạy nên em thêm App vào thôi.
3 là gõ app nó không bị lỗi gõ ư như worksheetfunction.
Hề hề.
 
Lần chỉnh sửa cuối:
Upvote 0
À thì cũng do cái thói "lỗi mà không biết cách chữa thì cứ viêc 'On Error Resume Next'"

- Hàm Trim của VBA chỉ trim các khoảng trắng đầu và đuôi chuỗi. Hàm Trim của bảng tính (gọi qua Application hay WorkSheetFunction) sẽ trim các khoảng trắng đầu/đuôi chuỗi, đồng thời giới hạn khoảng cách giữa 2 từ ở mức 1 khoảng trắng.

- Hàm StrConv, cái này thì dễ hiểu, là hàm chỉ hoạt động trên String. Vì vậy, chỉ có thể nạp 1 ô cho nó thôi. Hàm Applcation.Proper nhận cả một range.

Chú thích cho các bạn chưa biết chuyện "lỗi mà không biết cách chữa thì cứ viêc 'On Error Resume Next'":
Đây là cách lười biếng để giúp code vượt qua lỗi tính toán. Lưu ý từ "lỗi tính toán", vì vậy loại code này có thể cho ra kết quả sai mà người dùng khó biết.
Kết quả sai mà không biết thì bảng tính chỉ là một đống rác.
 
Upvote 0
Web KT

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

Back
Top Bottom