Viết code để Nhập cột "E2 - E50000" những ký tự in hoa, không dấu

Liên hệ QC

0905744404

Thành viên thường trực
Tham gia
26/10/10
Bài viết
333
Được thích
107
Nghề nghiệp
Trước là : Thủ Kho - còn giờ thì :"Tài Xế"
Chào cả nhà, nhờ mọi người viết giúp em đoạn code này với:
Viết code để Nhập cột "E2 - E50000" những ký tự in hoa, không dấu, cho dù đang dùng Unikey ở chế độ "V", em có file đính kèm sau:
 

File đính kèm

  • Nhap ky tu in hoa.xls
    27.5 KB · Đọc: 12
Không hiểu ý bạn là gì? Muốn viết hoa thì bật phím Caps lock thôi. Còn chuỗi ký tự của bạn dài lằng nhằng thế, chẳng may có nổi dấu thì gõ thêm phím 1 lần nữa là được thôi mà.
 
Upvote 0
Không hiểu ý bạn là gì? Muốn viết hoa thì bật phím Caps lock thôi. Còn chuỗi ký tự của bạn dài lằng nhằng thế, chẳng may có nổi dấu thì gõ thêm phím 1 lần nữa là được thôi mà.
Cám ơn bạn! đúng là như bạn nói thế nhưng mỗi lần nhập chữ "W" rất mất thời gian (vW) như vậy cần đoạn code để triệt tiêu vấn đề rắc rối này.
 
Upvote 0
Chào cả nhà, nhờ mọi người viết giúp em đoạn code này với:
Viết code để Nhập cột "E2 - E50000" những ký tự in hoa, không dấu, cho dù đang dùng Unikey ở chế độ "V", em có file đính kèm sau:
Bạn muốn là mặc dù Unikey ở chế độ tiếng Việt mà bạn đánh gì vào trong E2-E50000 vẫn hiểu là tiếng Anh tức là không có dấu phải không? Nếu vậy bạn chỉ cần nhấn tổ hợp phím tắt Ctrl + Shift thì từ V ==> chuyển sang E chứ gì, hay là sao không hiểu
 
Upvote 0
Bạn muốn là mặc dù Unikey ở chế độ tiếng Việt mà bạn đánh gì vào trong E2-E50000 vẫn hiểu là tiếng Anh tức là không có dấu phải không? Nếu vậy bạn chỉ cần nhấn tổ hợp phím tắt Ctrl + Shift thì từ V ==> chuyển sang E chứ gì, hay là sao không hiểu
Cám ơn bạn! điều này thì mình hiểu, nhưng mình muốn loại bỏ hẳn vấn đề này.
 
Upvote 0
Cám ơn bạn! điều này thì mình hiểu, nhưng mình muốn loại bỏ hẳn vấn đề này.
Hoặc là bạn đừng dùng trình gõ tiếng Việt nữa, hoặc là đã dùng thì phải chấp nhận thôi
Unikey có tổ hợp phím chuyển nhanh Anh - Việt là Ctrl + Shift hoặc Alt + Z rất đơn giản mà bạn
(tôi thì hay dùng Alt + Z hơn vì Ctrl + Shift hay đụng khi gõ công thức)
 
Upvote 0
Hoặc là bạn đừng dùng trình gõ tiếng Việt nữa, hoặc là đã dùng thì phải chấp nhận thôi
Unikey có tổ hợp phím chuyển nhanh Anh - Việt là Ctrl + Shift hoặc Alt + Z rất đơn giản mà bạn
(tôi thì hay dùng Alt + Z hơn vì Ctrl + Shift hay đụng khi gõ công thức)
Hình như mọi người hiểu sai ý của em rồi! Nhưng thao tác như trên thì em biết nhưng ý của em không phải như vậy.
Em muốn cột E2 - E50000 luôn mạc định là tiếng anh, (cho dù Unikey ở "V" hay ở "E"), và luôn mạc định ở chế độ chữ in, cho dù phím ở Caps Lock Hay không Caps Lock.
Giờ mọi người cho em hỏi là:
- Có thể viết code như vậy được không?
- Nếu được thì phải viết như thế nào?
!!! Cám ơn tất cả mọi người!!!
 
Upvote 0
Hình như mọi người hiểu sai ý của em rồi! Nhưng thao tác như trên thì em biết nhưng ý của em không phải như vậy.
Em muốn cột E2 - E50000 luôn mạc định là tiếng anh, (cho dù Unikey ở "V" hay ở "E"), và luôn mạc định ở chế độ chữ in, cho dù phím ở Caps Lock Hay không Caps Lock.
Giờ mọi người cho em hỏi là:
- Có thể viết code như vậy được không?
- Nếu được thì phải viết như thế nào?
!!! Cám ơn tất cả mọi người!!!
Mọi người không hiểu sai đâu, chỉ là bạn không hiểu mọi người nói thôi
Unikey đâu phải chỉ làm việc cho mỗi Excel, và đã bật nó lên rồi thì làm gì có cái chuyện khi gõ vùng này thì tiếng Anh còn vùng kia lại tiếng Việt
Muốn thì bạn tự chuyển bằng tay thôi ---> Không có cách nào khác
(Riêng phần chữ thường chữ hoa thì có thể viết code được)
 
Upvote 0
Mọi người không hiểu sai đâu, chỉ là bạn không hiểu mọi người nói thôi
Unikey đâu phải chỉ làm việc cho mỗi Excel, và đã bật nó lên rồi thì làm gì có cái chuyện khi gõ vùng này thì tiếng Anh còn vùng kia lại tiếng Việt
Muốn thì bạn tự chuyển bằng tay thôi ---> Không có cách nào khác
(Riêng phần chữ thường chữ hoa thì có thể viết code được)
Em nghĩ có thể có 1 cách là sử dụng thủ tục Worksheet_SelectionChange, và điều khiển tùy chọn của Vietkey qua thủ tục này. Tuy nhiên khả năng của em không thể làm được. Anh có thể làm được như thế không ạ?
 
Upvote 0
Chọn vùng cần chuyển rồi chạy đoạn Code này nhé bạn.
Sub PROPER()
Dim Cll as Range
Dim DL as String
For each Cll in Selection
DL=Cll.Value
DL=Ucase(DL)
Cll.Value=DL
Next
End Sub
 
Upvote 0
Chọn vùng cần chuyển rồi chạy đoạn Code này nhé bạn.
Sub PROPER()
Dim Cll as Range
Dim DL as String
For each Cll in Selection
DL=Cll.Value
DL=Ucase(DL)
Cll.Value=DL
Next
End Sub
Mình đã thêm vào auturun Sub auturun_PROPER()
Dim Cll As Range
Dim DL As String
For Each Cll In Selection
DL = Cll.Value
DL = UCase(DL)
Cll.Value = DL
Next
End Sub
nhưng vẫn không chạy tự động được. có cách nào khi nhập xong Enter là chuyển luôn không bạn?
 
Upvote 0
Em nghĩ có thể có 1 cách là sử dụng thủ tục Worksheet_SelectionChange, và điều khiển tùy chọn của Vietkey qua thủ tục này. Tuy nhiên khả năng của em không thể làm được. Anh có thể làm được như thế không ạ?
Trước tôi cũng từng nghĩ vậy nhưng thực tế không dễ chút nào! Làm sao ta có thể can thiệp được vào phần mềm khác đây? Dùng SendKeys à? Cũng khi vầy khi khác lắm, không chắc ăn
Vậy thầy giúp em đoạn code chư hoa chữ thường trước đã nha. còn phần còn V,E thì để tính sau cũng được ạ
Cứ nhập liệu bình thường, sau khi nhập xong, quét chọn vùng dữ liệu rồi chạy code dưới đây:
PHP:
Sub UpperCase()
  Dim sArray, Area As Range, i As Long, j As Long
  On Error Resume Next
  With Selection
    If .Count = 1 Then
      .Value = UCase(.Value)
    Else
      For Each Area In .Areas
        sArray = Area.Value
        If TypeName(sArray) <> "Variant()" Then
          If Trim(sArray) <> "" And Not (IsNumeric(sArray)) Then sArray = UCase(sArray)
        Else
          For i = 1 To UBound(sArray, 1)
            For j = 1 To UBound(sArray, 2)
              If Trim(sArray(i, j)) <> "" And Not (IsNumeric(sArray(i, j))) Then
                sArray(i, j) = UCase(sArray(i, j))
              End If
            Next
          Next
        End If
        Area.Value = sArray
      Next
    End If
  End With
End Sub
Ngoài ra, bạn cũng có thể dùng chính Unikey để chuyển đổi HOA thường (bấm Ctrl + Shift +F6 sẽ thấy các tùy chọn)
----------------------------------------
Chọn vùng cần chuyển rồi chạy đoạn Code này nhé bạn.
Sub PROPER()
Dim Cll as Range
Dim DL as String
For each Cll in Selection
DL=Cll.Value
DL=Ucase(DL)
Cll.Value=DL
Next
End Sub
Code này hoạt động trên Range, sẽ chạy chậm rì với dữ liệu lớn
---------------------------------------
nhưng vẫn không chạy tự động được. có cách nào khi nhập xong Enter là chuyển luôn không bạn?
Tốt nhất đừng bao giờ chơi trò TỰ ĐỘNG ---> Bạn sẽ gặp rắc rối dài dài
 
Lần chỉnh sửa cuối:
Upvote 0
nhưng vẫn không chạy tự động được. có cách nào khi nhập xong Enter là chuyển luôn không bạn?
Bạn có thể dùng sự kiện change như anh Ndu nói rất nguy hiểm mà có thể nó hơi chậm nữa
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [E2:E5000]) Is Nothing Then Target.Value = UCase(Target)
End Sub
 
Upvote 0
Trước tôi cũng từng nghĩ vậy nhưng thực tế không dễ chút nào! Làm sao ta có thể can thiệp được vào phần mềm khác đây? Dùng SendKeys à? Cũng khi vầy khi khác lắm, không chắc ăn

Cứ nhập liệu bình thường, sau khi nhập xong, quét chọn vùng dữ liệu rồi chạy code dưới đây:
PHP:
Sub UpperCase()
  Dim sArray, Area As Range, i As Long, j As Long
  On Error Resume Next
  With Selection
    If .Count = 1 Then
      Selection.Value = UCase(Selection.Value)
    Else
      For Each Area In .Areas
        sArray = Area.Value
        If TypeName(sArray) <> "Variant()" Then
          If Trim(sArray) <> "" And Not (IsNumeric(sArray)) Then sArray = UCase(sArray)
        Else
          For i = 1 To UBound(sArray, 1)
            For j = 1 To UBound(sArray, 2)
              If Trim(sArray(i, j)) <> "" And Not (IsNumeric(sArray(i, j))) Then
                sArray(i, j) = UCase(sArray(i, j))
              End If
            Next
          Next
        End If
        Area.Value = sArray
      Next
    End If
  End With
End Sub
Ngoài ra, bạn cũng có thể dùng chính Unikey để chuyển đổi HOA thường (bấm Ctrl + Shift +F6 sẽ thấy các tùy chọn)
----------------------------------------

Code này hoạt động trên Range, sẽ chạy chậm rì với dữ liệu lớn
---------------------------------------

Tốt nhất đừng bao giờ chơi trò TỰ ĐỘNG ---> Bạn sẽ gặp rắc rối dài dài
Em cám ơn thầy ạ!
Cho em hỏi thêm: Vậy còn code chuyển ngược lại thì sao hả Thầy?
 
Upvote 0
Bạn có thể dùng sự kiện change như anh Ndu nói rất nguy hiểm mà có thể nó hơi chậm nữa
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [E2:E5000]) Is Nothing Then Target.Value = UCase(Target)
End Sub
Với bất cứ sự kiện Change nào thực hiện biến đổi trực tiếp trên Target, ta phải luôn cho cặp lệnh Application.EnableEvents = False vào đầu code và Application.EnableEvents = True vào cuối code (nếu không coi chừng nó chạy hoài hoài luôn)
Ngoài ra, đã gọi là sự kiện Change thì không phải chỉ thực thi lệnh khi nhập liệu --> Copy/Paste nhiều cell cùng lúc ta không tính à?
---------------------------
Em cám ơn thầy ạ!
Cho em hỏi thêm: Vậy còn code chuyển ngược lại thì sao hả Thầy?
Trong code, chổ nào có chữ UCase thì sửa thành LCase ---> Sẽ chuyển toàn bộ thành chữ thường (chứ hổng phải chuyển ngược lại... ai biết trước đó là cái giống gì mà chuyển)
 
Upvote 0
Web KT
Back
Top Bottom