Nhờ các bạn giúp đỡ tinh giảm code trong vba giúp (3 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Bạn vào code là thấy Pass của mình đó mình đâu có khóa code
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
 
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
Bạn giúp làm sao để nhanh hơn không, viết giúp mình.
 
Bạn giúp làm sao để nhanh hơn không, viết giúp mình.
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
 
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
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é!
 
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é!
Vậy bạn tự nghiên cứu trong code đi nhé!
 
Web KT

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

Back
Top Bottom