Vẫn lỗi Run-time error '1004'

Liên hệ QC

duong_nam_dao

Thành viên chính thức
Tham gia
2/3/08
Bài viết
89
Được thích
44
Lại phiền các bác nữa đây. Trong tài liệu của em sử dụng lệnh tạo AutoCorrect. Khi khóa trang thì báo lỗi Run-time error '1004'. Em đã thêm lệnh mở khóa và khóa trang lại thì đánh không ra. Mong các bác chỉ giúp!
 

File đính kèm

Thật sự bác muốn làm gì ở vùng này, tức là khi gõ tắt đó vào thì sẽ xảy ra chuyện gì? Em đọc rồi mà cũng chẳng hiểu gì trọi?
 
Lần chỉnh sửa cuối:
Upvote 0
Em muốn gõ tắt thay thế cho AutoCorrect. Ví dụ gõ chữ T ra chữ Toán. Đây chỉ là file thử thôi, file chính của em khác cơ. Em không muốn dùng AutoCorrect của excel hoặc của các bộ gõ vì file của em dùng cho nhiều người mà họ chỉ biết áp dụng thôi. Bác xem giúp em
 
Upvote 0
Sự kiện Worksheet_Change chỉ xảy ra khi bạn kết thúc việc nhập liệu. Bạn mới nhập 1 ký tự đầu, sự kiện này chưa xảy ra, sheet vẫn còn bị khóa nên excel không cho nhập.
 
Upvote 0
Vậy sửa thế nào đây bác voda. Bác giúp em với
 
Upvote 0
Đó là cái vòng luẩn quẩn:
- Protect để khỏi nhập liệu
- Muốn nhập liệu phải UnProtect
- Muốn Unprotect thì worksheet phải change
- Muốn worksheet change thì phải nhập liệu

Muốn ra khỏi vòng thì phải format cell no locked cho vùng cần nhập liệu
 
Upvote 0
Vậy sao không dùng Vlookup để trích xuất ra, còn nếu không tìm thấy thì vẫn dữ nguyên vậy.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range) ActiveSheet.Unprotect "123" If Target.Row >= 4 And Target.Row = 6 And Target.Column  Còn khu vực đó thì bỏ chọn Lock Cell đi vì khi nhập vào không bị Protect nó lôi kéo! Thân
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Vậy sao không dùng Vlookup để trích xuất ra, còn nếu không tìm thấy thì vẫn dữ nguyên vậy.
Code của file trên tuy không dùng VLOOKUP nhưng dùng MATCH.. thuật toán cũng như nhau thôi mà
Vẩn cùng quan điểm với các cao thủ: Không thể Unprotect sheet bằng sự kiện WorkSheet_Change như kiểu bạn đang làm đựoc đâu... Chỉ có 1 cách là bỏ thuộc tính locked cho tất cả các cell trên vùng mà bạn muốn nhập liệu
Và nếu đã bỏ chọn thuộc tính Locked cho cell thì cần gì thêm code ActiveSheet.UnprotectActiveSheet.Protect ??? (Thừa)
 
Upvote 0
Hoặc chỉ đơn giản là như vầy cũng được. Còn protect hay không thì có thể là trong file chính thức của bác có xài nên không bỏ được, vậy tùy bác em không có ý kiến gì. Chỉ là tại ô nhập liệu vào thì đừng có Locked cell để người dùng có thể nhập được, vậy thôi!
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "123"
If Target.Row >= 4 And Target.Row <= 19 And Target.Column >= 6 And Target.Column <= 11 Then
    For i = [B4].Row To [B4].End(xlDown).Row
        If Target.Value = Cells(i, 3) Then
            Target.Value = Cells(i,2)
        End If
    Next
End If
ActiveSheet.Protect "123"
End Sub
 
Upvote 0
Hoặc chỉ đơn giản là như vầy cũng được. Còn protect hay không thì có thể là trong file chính thức của bác có xài nên không bỏ được, vậy tùy bác em không có ý kiến gì. Chỉ là tại ô nhập liệu vào thì đừng có Locked cell để người dùng có thể nhập được, vậy thôi!
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "123"
If Target.Row >= 4 And Target.Row <= 19 And Target.Column >= 6 And Target.Column <= 11 Then
    For i = [B4].Row To [B4].End(xlDown).Row
        If Target.Value = Cells(i, 3) Then
            Target.Value = Cells(i,2)
        End If
    Next
End If
ActiveSheet.Protect "123"
End Sub
Cái này cũng đựoc nhưng tôi nghĩ liệu có nên thay:
If Target.Value = Cells(i, 3) Then
thành:
If UCase(Target.Value) = UCase(Cells(i, 1)) Then
không nhỉ ?
 
Upvote 0
Cũng được nếu có trường hợp này thì bó tay!
Tin| Tn Tổng Ngành| TN
 
Lần chỉnh sửa cuối:
Upvote 0
Dùng VLOOKUP sẽ bớt được vòng lặp:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
    If Target.Row >= 4 And Target.Row <= 19 And Target.Column >= 6 And Target.Column <= 11 Then
          Target.Value = Application.WorksheetFunction.VLookup(Target.Value, Range("A4:B" & [B4].End(xlDown).Row), 2, 0)
    End If
End Sub
 
Upvote 0
Dùng VLOOKUP sẽ bớt được vòng lặp:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
    If Target.Row >= 4 And Target.Row <= 19 And Target.Column >= 6 And Target.Column <= 11 Then
          Target.Value = Application.WorksheetFunction.VLookup(Target.Value, Range("A4:B" & [B4].End(xlDown).Row), 2, 0)
    End If
End Sub
Nhưng nếu dùng VLOOKUP thì lại .... quay về ý kiến ở bài #11
 
Upvote 0
Web KT

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

Back
Top Bottom