Làm sao khi gõ 21002-03 excel hiểu 21002-21003??

Liên hệ QC

Tường_Vi

Thành viên tiêu biểu
Tham gia
19/4/10
Bài viết
482
Được thích
121
Nghề nghiệp
Luôn tìm kiếm một vị trí tốt hơn
Ví dụ ta thường xuyên phải gõ
21002-21003
19928-19931

nhưng giờ chỉ cần gõ
21002-3 hoặc 21002-03
hay
19928-1 hoặc 19928-31

Excel sẽ hiểu
21002-21003
19928-19931

Em đã nghĩ đển đoạn code đại khái như này nhưng chưa được
PHP:
  If Target <> "" And Target.Find("-") > 0 Then
                 Target.Value = Left(Target, Len(Target) - Target.Find("-")) ' doan nay con phai them
   End If

Xin các Huynh chỉ giúp
 
Ví dụ ta thường xuyên phải gõ
21002-21003
19928-19931

nhưng giờ chỉ cần gõ
21002-3 hoặc 21002-03
hay
19928-1 hoặc 19928-31

Excel sẽ hiểu
21002-21003
19928-19931

Em đã nghĩ đển đoạn code đại khái như này nhưng chưa được
PHP:
  If Target <> "" And Target.Find("-") > 0 Then
                 Target.Value = Left(Target, Len(Target) - Target.Find("-")) ' doan nay con phai them
   End If

Xin các Huynh chỉ giúp
Thử vầy xem:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Tmp1, Tmp2 As String
  On Error Resume Next
  Application.EnableEvents = False
  If Not Intersect([A1:A10], Target) Is Nothing Then
    Tmp1 = Split(Target.Value, "-")
    If UBound(Tmp1) > 0 Then
      Tmp2 = Left(Tmp1(0), Len(Tmp1(0)) - Len(Tmp1(1)))
      Target = Tmp1(0) & "-" & Tmp2 + Tmp1(1)
    End If
  End If
  Application.EnableEvents = True
End Sub
Cũng chưa hoàn hảo lắm ---> Bạn hãy chỉnh lại theo nhu cầu của mình
 
Upvote 0
Thử vầy xem:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Tmp1, Tmp2 As String
  On Error Resume Next
  Application.EnableEvents = False
  If Not Intersect([A1:A10], Target) Is Nothing Then
    Tmp1 = Split(Target.Value, "-")
    If UBound(Tmp1) > 0 Then
      Tmp2 = Left(Tmp1(0), Len(Tmp1(0)) - Len(Tmp1(1)))
      Target = Tmp1(0) & "-" & Tmp2 + Tmp1(1)
    End If
  End If
  Application.EnableEvents = True
End Sub
Cũng chưa hoàn hảo lắm ---> Bạn hãy chỉnh lại theo nhu cầu của mình

Đối với em là quá hoàn hảo rồi
nhưng em chưa hiểu đoạn code
PHP:
  Target = Tmp1(0) & "-" & Tmp2 + Tmp1(1)
sao không phải là

PHP:
  Target = Tmp1(0) & "-" & Tmp2 & Tmp1(1)

Thêm một thắc mắc nữa
Em đã đọc application.enablevent....nhưng thực sự chưa hiểu nó có ý nghĩa gì trong sub này???

Em chưa biết split và Ubound nhưng không ngờ qua ví dụ này hiểu được hai cái này
Cám ơn Anh nhiều nhiều lắm
 
Lần chỉnh sửa cuối:
Upvote 0
Đối với em là quá hoàn hảo rồi
nhưng em chưa hiểu đoạn code
PHP:
  Target = Tmp1(0) & "-" & Tmp2 + Tmp1(1)
sao không phải là

PHP:
  Target = Tmp1(0) & "-" & Tmp2 & Tmp1(1)
Bạn làm thế nào thì cứ.. tùy ý thôi, miễn sao đạt được mục đích
Thêm một thắc mắc nữa
Em đã đọc application.enablevent....nhưng thực sự chưa hiểu nó có ý nghĩa gì trong sub này???
Trong sự kiện Change, nếu ta thay đổi dữ liệu tại chính Target thì có phải là code sẽ chạy tiếp lần 2 hay không (thậm chí sẽ chạy tiếp nhiều lần sau đó) ---> Vì thế phải "chặn" đứng chúng lại, chỉ cho thay đổi 1 lần thôi
Ví dụ:
- Target là cell A1
- Ta viết code với ý muốn rằng nếu gõ vào cell A1 số gì đó thì nó sẽ tự cộng thêm 1
- Vậy ngay khi code thực hiện xong việc chuyển đổi thì đồng thời nó đã nhận ra sự kiện change trên Target
- Thế là code lại làm tiếp việc cộng thêm 1
- Rồi lại phát hiện sự kiện change và lại thực hiện code
vân vân... cứ thế không ngừng
Code ví dụ:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$1" Then Target = Target + 1
End Sub
Gõ số 1 vào A1 xem nó ra cái gì
Nhưng nếu sửa thành:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  If Target.Address = "$A$1" Then Target = Target + 1
  Application.EnableEvents = True
End Sub
Thì sẽ thấy sự khác biệt ngay!
 
Upvote 0
Thực sự lần này muội đã hiểu tường tận rồi, thảm nào nhiều lúc muội viết code xong, nó vẫn chạy bình thường những giả khi đặt chuột tại một cell bất kỳ, ngó lên thanh formular bar thì cứ thấy value bên trong cell bị "cà giật" hic,,,không hiểu sao nữa

Cám ơn Anh NDu rất nhiều
 
Upvote 0
Code không chạy khi cho thêm applicaion.enableevents

Muội có một file công việc, vừa tập tẹ thêm đoạn code application.enableevents vào thì toàn bộ file đó không chạy được nữa. Muội thử vào Security xem có bị thay đổi gì không nhưng nó vẫn ở chế độ cho phép macro chạy

Muội cũng thử đoạn code sau và mở lại file thì vẫn không thấy msg box chạy
không biết thử restart lại máy có được không?

PHP:
Private Sub Workbook_Open()
MsgBox "hello"
Application.EnableEvents = True
End Sub
Hu hu, giúp muội để cho code chạy lại với, hu hu
 
Lần chỉnh sửa cuối:
Upvote 0
muội vừa hỏi xong thì lại chạy được, hic hic
 
Upvote 0
Muội có một file công việc, vừa tập tẹ thêm đoạn code application.enableevents vào thì toàn bộ file đó không chạy được nữa. Muội thử vào Security xem có bị thay đổi gì không nhưng nó vẫn ở chế độ cho phép macro chạy

Muội cũng thử đoạn code sau và mở lại file thì vẫn không thấy msg box chạy
không biết thử restart lại máy có được không?

PHP:
Private Sub Workbook_Open()
MsgBox "hello"
Application.EnableEvents = True
End Sub
Hu hu, giúp muội để cho code chạy lại với, hu hu
Tôi nghĩ có thể trong lúc Test code, code bị lỗi giữa chừng. Tức là đã duyệt qua dòng lệnh Application.EnableEvents = False nhưng chưa duyệt qua dòng lệnh Application.EnableEvents = True, lúc này nó đang ở chế độ False.
Bạn thử làm như thế này xem có được không: Vào VBE, gõ vào cửa sổ Immediate dòng lệnh Application.EnableEvents = True rồi nhấn Enter.
 
Upvote 0
Web KT

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

Back
Top Bottom