Nhập liệu, tìm kiếm và hiện thông báo

Liên hệ QC

ffcb1900

Thành viên chính thức
Tham gia
27/7/08
Bài viết
77
Được thích
4
Mình cần sự giúp đỡ của mọi người để tạo 1 bảng tính sao cho

- Khi nhập dữ liệu vào 1 ô (định dạng text và số), nếu dữ liệu đã có trước đó ( trong những ô phía trên (cùng 1 cột)) thì hiện thông báo " Dữ liệu đã có" và nếu được thì highlight hoặc trỏ chuột tự động đến ô đã tồn tại đó

Rất mong mọi người giúp đỡ!

Cảm ơn các ban!
 

File đính kèm

  • Sample.xlsx
    9.3 KB · Đọc: 42
Chỉnh sửa lần cuối bởi điều hành viên:
Mình gửi nhé, cảm ơn bạn

Mới vừa trả lời xong cho bạn kia, ẹc ẹc ...

dùng VBA nhé bạn.

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rng As Range, MyRng As Range, ID As String
    If Target.Column = 1 Then
        ID = UCase(Target.Value)
        Set Rng = Range([A1], [A65536].End(xlUp))
        If ID = "" Or WorksheetFunction.CountIf(Rng, ID) <= 1 Then GoTo ExitSub
        Set MyRng = Rng.Find(ID, LookIn:=xlValues, LookAt:=xlWhole)
        If Not MyRng Is Nothing Then
            MyRng.Select
            MsgBox "Ma so nay: [ " & ID & " ] da ton tai"
            Target.Select
        End If
    End If
ExitSub:
    Set Rng = Nothing: Set MyRng = Nothing
End Sub
 

File đính kèm

  • MaTrung.xls
    29.5 KB · Đọc: 97
Anh làm bài này khó hiểu quá em nhập "a2" vao nhưng không xuất hiện thông báo gì cả anh ạ.

Bạn phải download về (kiểu save chứ không phải kiểu open) mới chạy được macro, và vì file có macro nên bạn phải chọn vào macro security là Low hoặc Midium mới có thể sử dụng được.
 
Mới vừa trả lời xong cho bạn kia, ẹc ẹc ...

dùng VBA nhé bạn.

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rng As Range, MyRng As Range, ID As String
    If Target.Column = 1 Then
        ID = UCase(Target.Value)
        Set Rng = Range([A1], [A65536].End(xlUp))
        If ID = "" Or WorksheetFunction.CountIf(Rng, ID) <= 1 Then GoTo ExitSub
        Set MyRng = Rng.Find(ID, LookIn:=xlValues, LookAt:=xlWhole)
        If Not MyRng Is Nothing Then
            MyRng.Select
            MsgBox "Ma so nay: [ " & ID & " ] da ton tai"
            Target.Select
        End If
    End If
ExitSub:
    Set Rng = Nothing: Set MyRng = Nothing
End Sub

Cảm ơn bạn nhiều nhé! Bạn giúp mình them tính năng khi hiện ra msgbox như hiện tại


  • Sẽ highlight (giả sử màu vàng) cả toàn bộ row của bản ghi đó
  • Tại msgbox có them ô chọn “Tạo bản ghi mới”, và khi user click chuột vào đây thì:
+ Bỏ highlight tại bản ghi trùng lặp ở trên
+ Xóa bản ghi vừa nhập vào và trỏ chuột tại vị trí đó để sẵn sang nhập mã mới

Ngoài ra bạn cho mình hỏi, mình rất quan tâm đến VBS cho excel, bạn chỉ cho mình chỗ học, hoac tai liệu tham khao nào hữu ích với
 
Cảm ơn bạn nhiều nhé! Bạn giúp mình them tính năng khi hiện ra msgbox như hiện tại


  • Sẽ highlight (giả sử màu vàng) cả toàn bộ row của bản ghi đó
  • Tại msgbox có them ô chọn “Tạo bản ghi mới”, và khi user click chuột vào đây thì:
+ Bỏ highlight tại bản ghi trùng lặp ở trên
+ Xóa bản ghi vừa nhập vào và trỏ chuột tại vị trí đó để sẵn sang nhập mã mới

Ngoài ra bạn cho mình hỏi, mình rất quan tâm đến VBS cho excel, bạn chỉ cho mình chỗ học, hoac tai liệu tham khao nào hữu ích với

Bạn đưa cái file thực sự của bạn lên đi, tôi sẽ làm cho bạn, chứ về cơ bản, bạn chưa biết về macro thì không làm trên sheet giả lập được đâu. Sau này có điều kiện bạn sẽ tìm hiểu tại diễn đàn này sẽ được học hỏi rất nhiều.

Còn sách vở thì bạn xem và tải file theo hướng dẫn tại đây:

http://www.giaiphapexcel.com/forum/showthread.php?55485-Marco-là-gì&p=393612#post393612
 
Bạn đưa cái file thực sự của bạn lên đi, tôi sẽ làm cho bạn, chứ về cơ bản, bạn chưa biết về macro thì không làm trên sheet giả lập được đâu. Sau này có điều kiện bạn sẽ tìm hiểu tại diễn đàn này sẽ được học hỏi rất nhiều.

Còn sách vở thì bạn xem và tải file theo hướng dẫn tại đây:

http://www.giaiphapexcel.com/forum/showthread.php?55485-Marco-là-gì&p=393612#post393612

Mình gửi lại, bạn giúp mình nhé.
Bạn thêm giúp mình 1lua chọn trọg msgbox la"Tiếp tục" ( cho dù tìm ra bản ghi trùng thì vẫn cho phép nhập mã trùng đó).vì mình chưa có máy tình nên gui file lại bạn sau nhé
Mình đã xem tài liệu bạn gửi link, trong đó mới chỉ là những khái niệm thôi nhỉ
 

File đính kèm

  • MaTrung.04.05.xls
    33.5 KB · Đọc: 12
Lần chỉnh sửa cuối:
Mình gửi lại, bạn giúp mình nhé.
Bạn thêm giúp mình 1lua chọn trọg msgbox la"Tiếp tục" ( cho dù tìm ra bản ghi trùng thì vẫn cho phép nhập mã trùng đó).vì mình chưa có máy tình nên gui file lại bạn sau nhé
Mình đã xem tài liệu bạn gửi link, trong đó mới chỉ là những khái niệm thôi nhỉ

Mình gửi lại file mới nhất nhờ các bạn giúp nhé
 

File đính kèm

  • MaTrung.07.05.xls
    35 KB · Đọc: 11
"Hoàng Dược Sư" chắc bận rồi, xem đỡ file này đi. OK hoặc Cancel thôi.
Bạn bate ơi,file ban gửi
ok bạn ạ,nhưng phát sinh trường hợp là nếu trong cột đã có hơn 1 bản ghi giống nhau thì thông báo chỉ trỏ đên bản ghi trùng đầu tiên,có thể làm để khi highlight các bản trung thì trỏ đến từng bản trùng 1 (giống chức năng Ctr+F vậy) ?

Nếu làm đc,thi trong popup se thông báo: Có ...(số bản trùng).. (ví dụ: có 3 bản trùng thì thông báo là 3 bản trung và trên msgbox sẽ có thêm 1nút,giả su là nút "Xem bản trùng tiếp theo" để clik vào se trỏ den va highlight bản trùng tiếp theo, theo thứ tự từ trên xuống dưới

Các bạn xem giúp mình nhé
 
Lần chỉnh sửa cuối:
Bạn bate ơi,file ban gửi
ok bạn ạ,nhưng phát sinh trường hợp là nếu trong cột đã có hơn 1 bản ghi giống nhau thì thông báo chỉ trỏ đên bản ghi trùng đầu tiên,có thể làm để khi highlight các bản trung thì trỏ đến từng bản trùng 1 (giống chức năng Ctr+F vậy) ?

Nếu làm đc,thi trong popup se thông báo: Có ...(số bản trùng).. (ví dụ: có 3 bản trùng thì thông báo là 3 bản trung và trên msgbox sẽ có thêm 1nút,giả su là nút "Xem bản trùng tiếp theo" để clik vào se trỏ den va highlight bản trùng tiếp theo, theo thứ tự từ trên xuống dưới

Các bạn xem giúp mình nhé
Sao ... đòi tiên thế?
Nhập trùng thì báo, Cho nhập thì nhập, không cho thì thôi, bây giờ lại thêm hiện từng dòng trùng theo từng cái "nhấp nút"...
Dồn tất cả trong một nút đi, tính sau.
 

File đính kèm

  • MaTrung3.rar
    11.1 KB · Đọc: 45
Sao ... đòi tiên thế?
Nhập trùng thì báo, Cho nhập thì nhập, không cho thì thôi, bây giờ lại thêm hiện từng dòng trùng theo từng cái "nhấp nút"...
Dồn tất cả trong một nút đi, tính sau.

Bạn Bate ơi, nếu sau mình muốn đổi cột nhập và tim giá trị sang cột khác thay vì cột A trong bảng tính bây giờ, thì mình sửa công thức của bạn như thế nào nhỉ?
 
Bạn Bate ơi, nếu sau mình muốn đổi cột nhập và tim giá trị sang cột khác thay vì cột A trong bảng tính bây giờ, thì mình sửa công thức của bạn như thế nào nhỉ?
Mở Code bằng cách ấn Alt-F11, sửa địa chỉ cột dữ liệu lại thôi.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim Rng(), I As Long, Tem As Variant, K As Long, Dong As Variant
If Not Intersect(Target, [A2:A1000]) Is Nothing Then '"<---Sửa địa chỉ dòng này"
    If Target.Rows.Count = 1 Then
        Rng = Sheet1.Range(Sheet1.[A1], Sheet1.[A65000].End(xlUp)).Value '"<---Sửa địa chỉ dòng này"
            For I = 1 To UBound(Rng, 1)
                If UCase(Cells(I, 1)) = UCase(Target) Then
                    Cells(I, 1).Resize(, 2).Interior.ColorIndex = 36 '"<---Sửa màu bằng số này"
                    Dong = Dong & Cells(I, 1).Row & ", "
                    K = K + 1
                End If
            Next
    End If
        If K > 1 Then
            Tem = MsgBox("Chu Y! Ma Da Co Roi." & _
            vbNewLine & "Dong :  " & Left(Dong, Len(Dong) - 2) & vbNewLine & "<OK> Tiep Tuc - <Cancel> Nhap lai", vbOKCancel, "Giai Phap Excel.")
                If Tem = vbCancel Then Target.ClearContents: Target.Select
                Sheet1.Cells.Interior.ColorIndex = 0
        End If
End If
Application.EnableEvents = True
End Sub
 
Mở Code bằng cách ấn Alt-F11, sửa địa chỉ cột dữ liệu lại thôi.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim Rng(), I As Long, Tem As Variant, K As Long, Dong As Variant
If Not Intersect(Target, [B2:B1000]) Is Nothing Then '"
    If Target.Rows.Count = 1 Then
        Rng = Sheet1.Range(Sheet1.[B1], Sheet1.[B65000].End(xlUp)).Value 
            For I = 1 To UBound(Rng, 1)
                If UCase(Cells(I, 1)) = UCase(Target) Then
                    Cells(I, 1).Resize(, 2).Interior.ColorIndex = 36 '"<---Sửa màu bằng số này"
                    Dong = Dong & Cells(I, 1).Row & ", "
                    K = K + 1
                End If
            Next
    End If
        If K > 1 Then
            Tem = MsgBox("Chu Y! Ma Da Co Roi." & _
            vbNewLine & "Dong :  " & Left(Dong, Len(Dong) - 2) & vbNewLine & "<OK> Tiep Tuc - <Cancel> Nhap lai", vbOKCancel, "Giai Phap Excel.")
                If Tem = vbCancel Then Target.ClearContents: Target.Select
                Sheet1.Cells.Interior.ColorIndex = 0
        End If
End If
Application.EnableEvents = True
End Sub

giả sử mình muốn sửa thành cột B, thì mình đã sửa 2chỗ có giá trị trong code như bạn hướng dẫn duoi đây nhưng vẫn không đc, chỉnh vậy có sai chỗ nào ko nhở

Rng = Sheet1.Range(Sheet1.[B1], Sheet1.[B65000].End(xlUp)).Value
If Not Intersect(Target, [B2:B1000]) Is Nothing Then '"
 
giả sử mình muốn sửa thành cột B, thì mình đã sửa 2chỗ có giá trị trong code như bạn hướng dẫn duoi đây nhưng vẫn không đc, chỉnh vậy có sai chỗ nào ko nhở

Rng = Sheet1.Range(Sheet1.[B1], Sheet1.[B65000].End(xlUp)).Value
If Not Intersect(Target, [B2:B1000]) Is Nothing Then '"
Nói chung là bạn nên đưa dữ liệu thật lên đi.
Còn muốn tự sửa thì cũng nên đọc hiểu được 1 số lệnh trong code chứ.
PHP:
If UCase(Cells(I, 1)) = UCase(Target) Then
Cells(I,1) là dòng I cột 1 (Cột A)
Sửa Cells(I,1) thành Cells(I,2) (Dòng I cột B) nữa.
Còn phải chỉnh lại điều kiện tô màu cho cột nào nữa chứ.
 
Nói chung là bạn nên đưa dữ liệu thật lên đi.
Còn muốn tự sửa thì cũng nên đọc hiểu được 1 số lệnh trong code chứ.
PHP:
If UCase(Cells(I, 1)) = UCase(Target) Then
Cells(I,1) là dòng I cột 1 (Cột A)
Sửa Cells(I,1) thành Cells(I,2) (Dòng I cột B) nữa.
Còn phải chỉnh lại điều kiện tô màu cho cột nào nữa chứ.

Bạn ơi, code này có 1 lỗi là, nếu giá trí nhập vào chưa từng có trong cột thì giá trị đó tự động bị bôi vàng :(File ví dụ vẫn như file đính kèm của mình ở bài dưới nhớ. Bạn xem lại giúp mình với

Bạn xem lại giúp mình nốt lần này nhớ:

- Code có hiệu lực cho Cột B (từ dòng thứ 6)
- Khi nhập 1 giá trị vào cột B (mà chưa có trước đó) thì không bị tô màu vàng như hiện tại

Cảm ơn bạn
 

File đính kèm

  • AMB.Control.zip
    422.4 KB · Đọc: 7
Chỉnh sửa lần cuối bởi điều hành viên:
Bạn xem lại giúp mình nốt lần này nhớ:

- Code có hiệu lực cho Cột B (từ dòng thứ 6)
- Khi nhập 1 giá trị vào cột B (mà chưa có trước đó) thì không bị tô màu vàng như hiện tại

Cảm ơn bạn
Xem lại file này coi được chưa, dữ liệu thật có khác đấy.
 

File đính kèm

  • AMB_Control.rar
    53.1 KB · Đọc: 33
Xem lại file này coi được chưa, dữ liệu thật có khác đấy.

Bạn ơi chỉ còn 1 lỗi đó là khi nhập bất kỳ dữ liệu nào vào các cột khác cột B thì lập tức định dạng màu dòng 1,2,3,4,5 bị chuyển hết thành màu trắng :( fix dùm mình với
 
Web KT
Back
Top Bottom