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ế"
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.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à.
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ểuChà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:
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.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
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ôiCá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.
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.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)
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ôiHì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!!!
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 ạ?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)
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 ạ(Riêng phần chữ thường chữ hoa thì có thể viết code được)
Mình đã thêm vào auturun Sub auturun_PROPER()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
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 ănEm 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 ạ?
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: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 ạ
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
Code này hoạt động trên Range, sẽ chạy chậm rì với dữ liệu lớnChọ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
Tốt nhất đừng bao giờ chơi trò TỰ ĐỘNG ---> Bạn sẽ gặp rắc rối dài dàinhư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ữanhư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?
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
Em cám ơn thầy ạ!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:
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)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
----------------------------------------
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
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)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
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)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?