huyhoang_mmyeht
Thành viên hoạt động



- Tham gia
- 5/5/09
- Bài viết
- 142
- Được thích
- 12
Bạn vào code là thấy Pass của mình đó mình đâu có khóa codeBạn protect sheet rồi lấy gì sửa.
Bạn vào code là thấy Pass của mình đó mình đâu có khóa codeBạn protect sheet rồi lấy gì sửa.
Bạn có thể dùng lệnh này để khóa sheet và chỉ cho di chuyển vào các ô không khóa (lock) nhưng làm việc với sheet và cứ protect và Unprotect hoài thì tốc độ sẽ chậm là hiển nhiên. Nên không khuyến cáo dùng cách này.Bạn vào code là thấy Pass của mình đó mình đâu có khóa code
SH2.Protect Password:="hoilamchi", AllowFiltering:=True, Contents:=True, Scenarios:=True
Bạn giúp làm sao để nhanh hơn không, viết giúp mình.Bạn có thể dùng lệnh này để khóa sheet và chỉ cho di chuyển vào các ô không khóa (lock) nhưng làm việc với sheet và cứ protect và Unprotect hoài thì tốc độ sẽ chậm là hiển nhiên. Nên không khuyến cáo dùng cách này.
Mã:SH2.Protect Password:="hoilamchi", AllowFiltering:=True, Contents:=True, Scenarios:=True
Thử thế này xem sao, nhơ là Unprotect sheet nhé.Bạn giúp làm sao để nhanh hơn không, viết giúp mình.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, uRng As Range, cCell As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
'Call Unlocknc
With SH2
If Target.Address = "$H$5" Then
.Range("$J$3:$BA$3").EntireColumn.Hidden = False
Set Rng = SH1.Range("H:H").Find(Target.Value2, , xlValues, xlWhole, , , True)
If Not Rng Is Nothing Then
.Range("A5:F5").Value = Rng.Offset(, -6).Resize(, 6).Value
.Range("J1:BA1").Value = Rng.Offset(, 2).Resize(, 44).Value
.Range("J2:BA2").FormulaR1C1 = "=SUMIF(R8C2:R68653C2,R5C2,R8C:R68653C)"
.Range("J2:BA2").Value = .Range("J2:BA2").Value
Else
MsgBox "Ma so ban vua nhap khong co"
Target = Empty
Target.Select
GoTo Ketthuc
End If
If ([I8] = 0) Then Rows("8").EntireRow.Delete
Rows("8").EntireRow.Insert
.Range("J5:BA5").ClearContents
.Range("A8:H8").FormulaR1C1 = "=R5C"
.Range("I8").FormulaR1C1 = "=SUM(RC10:RC53)"
.Range("A8:H8").Value = .Range("A8:H8").Value
Set Rng = Nothing
For Each Rng In Range("$J$3:$BA$3")
If Rng.Value = 0 Then
If uRng Is Nothing Then
Set uRng = Rng
Else
Set uRng = Union(uRng, Rng)
End If
End If
Next Rng
If Not uRng Is Nothing Then uRng.EntireColumn.Hidden = True
Set cCell = .Range("J5")
Do While cCell.EntireColumn.Hidden = True
Set cCell = cCell.Offset(, 1)
Loop
cCell.Select
End If
If Not Application.Intersect(Range("J5:BA5"), Target) Is Nothing Then
If Target.Cells.Count > 1 Then Exit Sub
Target.Offset(3).FormulaR1C1 = "=R5C"
Target.Offset(3).Value = Target.Offset(3).Value
Target.Offset(-3).FormulaR1C1 = "=SUMIF(R8C2:R68653C2,R5C2,R8C:R68653C)"
Target.Offset(-3).Value = Target.Offset(-3).Value
If (Target.Offset(-4).Value - Target.Offset(-3).Value < 0) Then
MsgBox "Khong the nhap lon hon KH"
Target.Value = Empty
Target.Select
Target.Offset(3).FormulaR1C1 = "=R5C"
Target.Offset(3).Value = Target.Offset(3).Value
Target.Offset(-3).FormulaR1C1 = "=SUMIF(R8C2:R68653C2,R5C2,R8C:R68653C)"
Target.Offset(-3).Value = Target.Offset(-3).Value
End If
Set cCell = Target.Offset(, 1)
Do While cCell.EntireColumn.Hidden = True
Set cCell = cCell.Offset(, 1)
Loop
If cCell.Address = "$BB$5" Then
.Range("H5").Select
Else
cCell.Select
End If
End If
End With
Ketthuc:
'Call locknc
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Mình muốn dùng sự kiện Enter nó chỉ chạy qua chạy lại những ô này được không, vì mình muốn giảm thời gian thao tác vô ích cho người nhập liệu mà có thể làm nhanh nhất.Thử thế này xem sao, nhơ là Unprotect sheet nhé.
Mã:Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range, uRng As Range, cCell As Range Application.ScreenUpdating = False Application.EnableEvents = False 'Call Unlocknc With SH2 If Target.Address = "$H$5" Then .Range("$J$3:$BA$3").EntireColumn.Hidden = False Set Rng = SH1.Range("H:H").Find(Target.Value2, , xlValues, xlWhole, , , True) If Not Rng Is Nothing Then .Range("A5:F5").Value = Rng.Offset(, -6).Resize(, 6).Value .Range("J1:BA1").Value = Rng.Offset(, 2).Resize(, 44).Value .Range("J2:BA2").FormulaR1C1 = "=SUMIF(R8C2:R68653C2,R5C2,R8C:R68653C)" .Range("J2:BA2").Value = .Range("J2:BA2").Value Else MsgBox "Ma so ban vua nhap khong co" Target = Empty Target.Select GoTo Ketthuc End If If ([I8] = 0) Then Rows("8").EntireRow.Delete Rows("8").EntireRow.Insert .Range("J5:BA5").ClearContents .Range("A8:H8").FormulaR1C1 = "=R5C" .Range("I8").FormulaR1C1 = "=SUM(RC10:RC53)" .Range("A8:H8").Value = .Range("A8:H8").Value Set Rng = Nothing For Each Rng In Range("$J$3:$BA$3") If Rng.Value = 0 Then If uRng Is Nothing Then Set uRng = Rng Else Set uRng = Union(uRng, Rng) End If End If Next Rng If Not uRng Is Nothing Then uRng.EntireColumn.Hidden = True Set cCell = .Range("J5") Do While cCell.EntireColumn.Hidden = True Set cCell = cCell.Offset(, 1) Loop cCell.Select End If If Not Application.Intersect(Range("J5:BA5"), Target) Is Nothing Then If Target.Cells.Count > 1 Then Exit Sub Target.Offset(3).FormulaR1C1 = "=R5C" Target.Offset(3).Value = Target.Offset(3).Value Target.Offset(-3).FormulaR1C1 = "=SUMIF(R8C2:R68653C2,R5C2,R8C:R68653C)" Target.Offset(-3).Value = Target.Offset(-3).Value If (Target.Offset(-4).Value - Target.Offset(-3).Value < 0) Then MsgBox "Khong the nhap lon hon KH" Target.Value = Empty Target.Select Target.Offset(3).FormulaR1C1 = "=R5C" Target.Offset(3).Value = Target.Offset(3).Value Target.Offset(-3).FormulaR1C1 = "=SUMIF(R8C2:R68653C2,R5C2,R8C:R68653C)" Target.Offset(-3).Value = Target.Offset(-3).Value End If Set cCell = Target.Offset(, 1) Do While cCell.EntireColumn.Hidden = True Set cCell = cCell.Offset(, 1) Loop If cCell.Address = "$BB$5" Then .Range("H5").Select Else cCell.Select End If End If End With Ketthuc: 'Call locknc Application.EnableEvents = True Application.ScreenUpdating = True End Sub
Vậy bạn tự nghiên cứu trong code đi nhé!Mình muốn dùng sự kiện Enter nó chỉ chạy qua chạy lại những ô này được không, vì mình muốn giảm thời gian thao tác vô ích cho người nhập liệu mà có thể làm nhanh nhất.
Bài đã được tự động gộp:
Cảm ơn bạn nhiều nhé!