code VBA không chạy lệnh khi thay đổi giá trị điền vào

  • Thread starter Thread starter hic1802
  • Ngày gửi Ngày gửi
Liên hệ QC

hic1802

Thành viên tiêu biểu
Tham gia
16/2/13
Bài viết
545
Được thích
34
Giới tính
Nam
Chào diễn đàn GPE,
Lâu mới ghé thăm thấy giao diện và post bài mới hơi khác
Em có đoạn code nhờ mọi người giúp

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngA As Range
    Dim rngTempA As Range
    On Error GoTo Loi
    Set rngA = Application.Intersect(Me.Range("A5", Me.Cells(Me.Rows.Count, 1)), Target)
    If rngA Is Nothing Then GoTo Thoat 'vung khong lien quan
  
    For Each rngTempA In rngA.Areas
        With rngTempA
            .Offset(, 1).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[1]="""","""",VLOOKUP(RC[1],DM_SP!R2C2:R9999C7,6,0))")
            .Offset(, 7).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-5]="""","""",VLOOKUP(RC[-5],DONGIA!R2C7:R9998C10,4,0))")
            .Offset(, 8).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-4]/RC[-1],"""")")
            .Offset(, 9).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-7]="""","""",VLOOKUP(RC[-7],DM_SP!R2C2:R999C7,3,0))")
            .Offset(, 10).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-8]="""","""",VLOOKUP(RC[-8],DM_SP!R2C2:R999C7,4,0))")
            .Offset(, 11).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-9]="""","""",VLOOKUP(RC[-9],DM_SP!R2C2:R999C7,4,0))")
            .Offset(, 75).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-15]+RC[-16]+RC[-17],0)")
            .Offset(, 82).FormulaR1C1 = GetFormual(rngTempA, "=SUMIFS(BC_NGAYSX!R5C12:R9940C12,BC_NGAYSX!R5C3:R9940C3,RC[-79])")
            .Offset(, 83).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-14]="""","""",IF(RC[-1]="""",""CN"",IFERROR(RC[-2]/RC[-1],0)))")
            .Offset(, 84).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-5]<>"""",IFERROR(RC[-5]/RC[-2],""""),IFERROR(RC[-10]/RC[-2],""""))")
            .Offset(, 85).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-1]/RC[-78],"""")")
            .Offset(, 86).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-12]/RC[-11],"""")")
            .Offset(, 87).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(2*RC[-1]/(RC[-78]+RC[-77]),"""")")
            .Offset(, 92).FormulaR1C1 = GetFormual(rngTempA, "=RC[-6]")
            .Offset(, 93).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-19]/(RC[-34]+RC[-33]),"""")")
            .Offset(, 94).FormulaR1C1 = GetFormual(rngTempA, "=IF(AND(RC[-94]<>"""",R[-1]C<>""""),R[-1]C+1,IF(AND(RC[-94]<>"""",R[-1]C=""""),1,""""))")
            .Offset(, 95).FormulaR1C1 = GetFormual(rngTempA, "=IF(AND(RC[1]<>"""",RC[2]<>"""",RC[3]<>"""",RC[4]<>""""),""x"","""")")
            .Offset(, 81).FormulaR1C1 = GetFormual(rngTempA, "=IF(AND(RC[-7]="""",RC[-2]=""""),"""",IF(RC[-7]=RC[-2],""ÐÚNG"",""SAI""))")
            .Offset(, 58).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-32]+RC[-31]+RC[-30]+RC[-29]+RC[-28]+RC[-27]+RC[-26]+RC[-25]+RC[-24]+RC[-23]+RC[-22]*0.1+RC[-21]*0.035+RC[-20]+RC[-19]+RC[-18]+RC[-17]+RC[-16]+RC[-15]+RC[-14]+RC[-13]+RC[-12]+RC[-11]+RC[-10]+RC[-9]+RC[-8]+RC[-7]+RC[-6]+RC[-5]*1+RC[-4],0)")
      
        End With
      
         rngTempA.Resize(, 100).Borders.LineStyle = 1
    
    Next
Thoat:
    Set rngA = Nothing
    Set rngTempA = Nothing
  
    With Range("C4:C99999")
    If Not Intersect(Target, .Cells) Is Nothing Then
      If Target <> "" Then Target.Offset(, 3).Value = Now()
        Target.Offset(, 94).NumberFormat = "hh:mm - dd/mm"
    End If
    End With
  
    Exit Sub
Loi:
    MsgBox Err.Description
    Resume Thoat
  
If Not Intersect(Range("N4:y99999"), Target) Is Nothing Then
Cells(Target.Row, 98).Value = Now()
Cells(Target.Row, 98).NumberFormat = "hh:mm - dd/mm"
End If
If Not Intersect(Range("bh4:bk99999"), Target) Is Nothing Then
Cells(Target.Row, 99).Value = Now()
Cells(Target.Row, 99).NumberFormat = "hh:mm - dd/mm"
End If
If Not Intersect(Range("bl4:bo99999"), Target) Is Nothing Then
Cells(Target.Row, 100).Value = Now()
Cells(Target.Row, 100).NumberFormat = "hh:mm - dd/mm"
End If
End Sub

Em thấy code chạy đúng khi cột A thay đổi
Còn khi các range khác thay đổi ko thấy chạy lệnh tức là các dòng lệnh phía dưới không thấy tác dụng gì
Mã:
If Not Intersect(Range("N4:y99999"), Target) Is Nothing Then

Cells(Target.Row, 98).Value = Now()

Cells(Target.Row, 98).NumberFormat = "hh:mm - dd/mm"

End If

If Not Intersect(Range("bh4:bk99999"), Target) Is Nothing Then

Cells(Target.Row, 99).Value = Now()

Cells(Target.Row, 99).NumberFormat = "hh:mm - dd/mm"

End If

If Not Intersect(Range("bl4:bo99999"), Target) Is Nothing Then

Cells(Target.Row, 100).Value = Now()

Cells(Target.Row, 100).NumberFormat = "hh:mm - dd/mm"

End If

Nhờ mọi người giúp đỡ dòng code trên.
Cảm ơn mọi người trước.
 
Tôi không theo dõi code của bạn nhưng nếu đoán được ý thì cho cả cụm "không thấy tác dụng gì" lên trước dòng "On Error GoTo Loi"
 
Tôi không theo dõi code của bạn nhưng nếu đoán được ý thì cho cả cụm "không thấy tác dụng gì" lên trước dòng "On Error GoTo Loi"
Vẫn ko được bác ơi
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngA As Range
    Dim rngTempA As Range
  
With Range("C4:C99999")
    If Not Intersect(Target, .Cells) Is Nothing Then
        If Target <> "" Then
        Target.Offset(, 3).Value = Now()
        Target.Offset(, 3).NumberFormat = "hh:mm - dd/mm"
    End If
End With
  
If Not Intersect(Range("N4:y99999"), Target) Is Nothing Then
Cells(Target.Row, 98).Value = Now()
Cells(Target.Row, 98).NumberFormat = "hh:mm - dd/mm"
End If
If Not Intersect(Range("bh4:bk99999"), Target) Is Nothing Then
Cells(Target.Row, 99).Value = Now()
Cells(Target.Row, 99).NumberFormat = "hh:mm - dd/mm"
End If
If Not Intersect(Range("bl4:bo99999"), Target) Is Nothing Then
Cells(Target.Row, 100).Value = Now()
Cells(Target.Row, 100).NumberFormat = "hh:mm - dd/mm"
End If
  
    On Error GoTo Loi
    Set rngA = Application.Intersect(Me.Range("A5", Me.Cells(Me.Rows.Count, 1)), Target)
    If rngA Is Nothing Then GoTo Thoat 'vung khong lien quan
  
    For Each rngTempA In rngA.Areas
        With rngTempA
            .Offset(, 1).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[1]="""","""",VLOOKUP(RC[1],DM_SP!R2C2:R9999C7,6,0))")
            .Offset(, 7).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-5]="""","""",VLOOKUP(RC[-5],DONGIA!R2C7:R9998C10,4,0))")
            .Offset(, 8).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-4]/RC[-1],"""")")
            .Offset(, 9).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-7]="""","""",VLOOKUP(RC[-7],DM_SP!R2C2:R999C7,3,0))")
            .Offset(, 10).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-8]="""","""",VLOOKUP(RC[-8],DM_SP!R2C2:R999C7,4,0))")
            .Offset(, 11).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-9]="""","""",VLOOKUP(RC[-9],DM_SP!R2C2:R999C7,4,0))")
            .Offset(, 75).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-15]+RC[-16]+RC[-17],0)")
            .Offset(, 82).FormulaR1C1 = GetFormual(rngTempA, "=SUMIFS(BC_NGAYSX!R5C12:R9940C12,BC_NGAYSX!R5C3:R9940C3,RC[-79])")
            .Offset(, 83).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-14]="""","""",IF(RC[-1]="""",""CN"",IFERROR(RC[-2]/RC[-1],0)))")
            .Offset(, 84).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-5]<>"""",IFERROR(RC[-5]/RC[-2],""""),IFERROR(RC[-10]/RC[-2],""""))")
            .Offset(, 85).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-1]/RC[-78],"""")")
            .Offset(, 86).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-12]/RC[-11],"""")")
            .Offset(, 87).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(2*RC[-1]/(RC[-78]+RC[-77]),"""")")
            .Offset(, 92).FormulaR1C1 = GetFormual(rngTempA, "=RC[-6]")
            .Offset(, 93).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-19]/(RC[-34]+RC[-33]),"""")")
            .Offset(, 94).FormulaR1C1 = GetFormual(rngTempA, "=IF(AND(RC[-94]<>"""",R[-1]C<>""""),R[-1]C+1,IF(AND(RC[-94]<>"""",R[-1]C=""""),1,""""))")
            .Offset(, 95).FormulaR1C1 = GetFormual(rngTempA, "=IF(AND(RC[1]<>"""",RC[2]<>"""",RC[3]<>"""",RC[4]<>""""),""x"","""")")
            .Offset(, 81).FormulaR1C1 = GetFormual(rngTempA, "=IF(AND(RC[-7]="""",RC[-2]=""""),"""",IF(RC[-7]=RC[-2],""ÐÚNG"",""SAI""))")
            .Offset(, 58).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-32]+RC[-31]+RC[-30]+RC[-29]+RC[-28]+RC[-27]+RC[-26]+RC[-25]+RC[-24]+RC[-23]+RC[-22]*0.1+RC[-21]*0.035+RC[-20]+RC[-19]+RC[-18]+RC[-17]+RC[-16]+RC[-15]+RC[-14]+RC[-13]+RC[-12]+RC[-11]+RC[-10]+RC[-9]+RC[-8]+RC[-7]+RC[-6]+RC[-5]*1+RC[-4],0)")
      
        End With
      
         rngTempA.Resize(, 100).Borders.LineStyle = 1
    
    Next
Thoat:
    Set rngA = Nothing
    Set rngTempA = Nothing
  
    Exit Sub
Loi:
    MsgBox Err.Description
    Resume Thoat
  

End Sub

Em thấy nó báo lỗi ở đoạn If Target <> "" Then
 
Lần chỉnh sửa cuối:
Tôi nói về cái cụm mà bạn liệt kê ra.

Tại sao bạn lại cho cả
Mã:
With Range("C4:C99999")
    If Not Intersect(Target, .Cells) Is Nothing Then
      If Target <> "" Then Target.Offset(, 3).Value = Now()
        Target.Offset(, 94).NumberFormat = "hh:mm - dd/mm"
    End If
    End With
lên đầu?

Tôi nói thế này
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngA As Range
    Dim rngTempA As Range

If Not Intersect(Range("N4:y99999"), Target) Is Nothing Then
Cells(Target.Row, 98).Value = Now()
Cells(Target.Row, 98).NumberFormat = "hh:mm - dd/mm"
End If
If Not Intersect(Range("bh4:bk99999"), Target) Is Nothing Then
Cells(Target.Row, 99).Value = Now()
Cells(Target.Row, 99).NumberFormat = "hh:mm - dd/mm"
End If
If Not Intersect(Range("bl4:bo99999"), Target) Is Nothing Then
Cells(Target.Row, 100).Value = Now()
Cells(Target.Row, 100).NumberFormat = "hh:mm - dd/mm"
End If

    On Error GoTo Loi
...
End Sub
 
Tôi nói về cái cụm mà bạn liệt kê ra.

Tại sao bạn lại cho cả
Mã:
With Range("C4:C99999")
    If Not Intersect(Target, .Cells) Is Nothing Then
      If Target <> "" Then Target.Offset(, 3).Value = Now()
        Target.Offset(, 94).NumberFormat = "hh:mm - dd/mm"
    End If
    End With
lên đầu?

Tôi nói thế này
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngA As Range
    Dim rngTempA As Range

If Not Intersect(Range("N4:y99999"), Target) Is Nothing Then
Cells(Target.Row, 98).Value = Now()
Cells(Target.Row, 98).NumberFormat = "hh:mm - dd/mm"
End If
If Not Intersect(Range("bh4:bk99999"), Target) Is Nothing Then
Cells(Target.Row, 99).Value = Now()
Cells(Target.Row, 99).NumberFormat = "hh:mm - dd/mm"
End If
If Not Intersect(Range("bl4:bo99999"), Target) Is Nothing Then
Cells(Target.Row, 100).Value = Now()
Cells(Target.Row, 100).NumberFormat = "hh:mm - dd/mm"
End If

    On Error GoTo Loi
...
End Sub

Vì dòng đó cũng ko chạy bác ơi
Nếu không có đoạn đó thì chạy ko được chuẩn cho lắm,
Nếu chạy được đoạn code đó thì đúng ý của e nên e chạy thử luôn.
 
Vì dòng đó cũng ko chạy bác ơi
Nếu không có đoạn đó thì chạy ko được chuẩn cho lắm,
Nếu chạy được đoạn code đó thì đúng ý của e nên e chạy thử luôn.
Nếu bạn muốn người khác giúp chỉnh lại code thì:
1. Tốt nhất là đính kèm tập tin.
2. Mô tả kỹ bạn muốn làm gì, thay đổi, nhập dữ liệu vào những cột nào. Có thao tác nào làm liền với vài ô (nhiều hơn 1 ô) không? Vd. bạn chọn C4:C10 (hoặc chọn vd. C4 và C13) rồi nhấn Delete hoặc dán vào nó từ nguồn ngoài?
 
Nếu bạn muốn người khác giúp chỉnh lại code thì:
1. Tốt nhất là đính kèm tập tin.
2. Mô tả kỹ bạn muốn làm gì, thay đổi, nhập dữ liệu vào những cột nào. Có thao tác nào làm liền với vài ô (nhiều hơn 1 ô) không? Vd. bạn chọn C4:C10 (hoặc chọn vd. C4 và C13) rồi nhấn Delete hoặc dán vào nó từ nguồn ngoài?

Đây bác ơi, chạy trên sheet luôn a
 

File đính kèm

Nhắc lại
2. Mô tả kỹ bạn muốn làm gì, thay đổi, nhập dữ liệu vào những cột nào. Có thao tác nào làm liền với vài ô (nhiều hơn 1 ô) không? Vd. bạn chọn C4:C10 (hoặc chọn vd. C4 và C13) rồi nhấn Delete hoặc dán vào nó từ nguồn ngoài?

Về lỗi thì khi bạn nhập / xóa ở đâu thì sảy ra lỗi?

Vd. nếu bạn nhập xóa cùng một lúc cho nhiều ô trong cột C thì có lỗi.

Tôi không phân tích code để suy ra ý của bạn. Đơn giản vì ý bạn thế nào tự bạn viết ra được.

Tôi biết chơi nhưng tôi không thích chơi trò "đoán ý đồng đội"

Code hiện tại thiếu End If
Mã:
With Range("C4:C99999")
    If Not Intersect(Target, .Cells) Is Nothing Then
    If Target <> "" Then
        Target.Offset(, 3).Value = Now()
        Target.Offset(, 3).NumberFormat = "hh:mm - dd/mm"
    End If
    End If        ' <-- hiện đang thiếu
End With
 
Lần chỉnh sửa cuối:
Nhắc lại


Về lỗi thì khi bạn nhập / xóa ở đâu thì sảy ra lỗi?

Vd. nếu bạn nhập xóa cùng một lúc cho nhiều ô trong cột C thì có lỗi.

Tôi không phân tích code để suy ra ý của bạn. Đơn giản vì ý bạn thế nào tự bạn viết ra được.

Tôi biết chơi nhưng tôi không thích chơi trò "đoán ý đồng đội"

Code hiện tại thiếu End If
Mã:
With Range("C4:C99999")
    If Not Intersect(Target, .Cells) Is Nothing Then
    If Target <> "" Then
        Target.Offset(, 3).Value = Now()
        Target.Offset(, 3).NumberFormat = "hh:mm - dd/mm"
    End If
    End If        ' <-- hiện đang thiếu
End With

Cảm ơn bác đã góp ý, e xin thưa như sau:
Theo em thì cơ bản kết quả của 2 đoạn code
Mã:
With Range("C4:C99999")
    If Not Intersect(Target, .Cells) Is Nothing Then
      If Target <> "" Then Target.Offset(, 3).Value = Now()
        Target.Offset(, 94).NumberFormat = "hh:mm - dd/mm"
    End If
    End With
và dòng code
Mã:
If Not Intersect(Range("N4:y99999"), Target) Is Nothing Then
Cells(Target.Row, 98).Value = Now()
Cells(Target.Row, 98).NumberFormat = "hh:mm - dd/mm"
End If

đều là khi thay đổi 1 ô trong vùng ô được lựa chọn sẽ ghi lại thời gian thực thay đổi tại dòng chứa ô thay đổi đó.
Tuy nhiên ở code đầu em test 1 mình đoạn đó thì khi ta thao tác với nhiều ô (paste 1 vùng dữ liệu ngoài vào) cho kết quả tại tất cả vùng đc thay đổi, các dòng đó đều ghi lại thời gian, còn ở code 2 thì chỉ có dòng tại ô được paste mới ghi lại thời gian, các dòng phía dưới không có ghi lại. Do e cũng chỉ amator nên không rõ bản chất code lắm nên khi e chèn thêm code đầu đó vào thì thấy chạy lỗi, khi chạy riêng nó thì không thấy báo lỗi gì cả.
Hiện tại đã chỉnh thêm như ý bác nhưng khi paste 1 vùng dữ liệu ngoài vào ô C4 thì báo lỗi tại dòng : If Target <> "" Then
 
Lần chỉnh sửa cuối:
Tôi đoán được vì thế mới viết
Vd. nếu bạn nhập xóa cùng một lúc cho nhiều ô trong cột C thì có lỗi.

Mã:
Application.EnableEvents = False
Set rngA = Intersect(Target, Range("C4:C99999"))
If Not rngA Is Nothing Then
    rngA.Offset(, 3).ClearContents
    For Each rngTempA In rngA
        If rngTempA.Value <> "" Then
            rngTempA.Offset(, 3).Value = Now()
            rngTempA.Offset(, 3).NumberFormat = "hh:mm - dd/mm"
        End If
    Next
End If
...
...
Application.EnableEvents = True
 
Tôi đoán được vì thế mới viết


Mã:
Application.EnableEvents = False
Set rngA = Intersect(Target, Range("C4:C99999"))
If Not rngA Is Nothing Then
    rngA.Offset(, 3).ClearContents
    For Each rngTempA In rngA
        If rngTempA.Value <> "" Then
            rngTempA.Offset(, 3).Value = Now()
            rngTempA.Offset(, 3).NumberFormat = "hh:mm - dd/mm"
        End If
    Next
End If
...
...
Application.EnableEvents = True

không thấy chạy code bác ơi
Bác xem code nhé

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngA As Range
    Dim rngTempA As Range
    
Application.EnableEvents = False
Set rngA = Intersect(Target, Range("C4:C99999"))
If Not rngA Is Nothing Then
    rngA.Offset(, 3).ClearContents
    For Each rngTempA In rngA
        If rngTempA.Value <> "" Then
            rngTempA.Offset(, 3).Value = Now()
            rngTempA.Offset(, 3).NumberFormat = "hh:mm - dd/mm"
        End If
    Next
End If
    
If Not Intersect(Range("N4:y99999"), Target) Is Nothing Then
Cells(Target.Row, 98).Value = Now()
Cells(Target.Row, 98).NumberFormat = "hh:mm - dd/mm"
End If
If Not Intersect(Range("bh4:bk99999"), Target) Is Nothing Then
Cells(Target.Row, 99).Value = Now()
Cells(Target.Row, 99).NumberFormat = "hh:mm - dd/mm"
End If
If Not Intersect(Range("bl4:bo99999"), Target) Is Nothing Then
Cells(Target.Row, 100).Value = Now()
Cells(Target.Row, 100).NumberFormat = "hh:mm - dd/mm"
End If
Application.EnableEvents = True
    
    On Error GoTo Loi
    Set rngA = Application.Intersect(Me.Range("A5", Me.Cells(Me.Rows.Count, 1)), Target)
    If rngA Is Nothing Then GoTo Thoat 'vung khong lien quan
    
    For Each rngTempA In rngA.Areas
        With rngTempA
            .Offset(, 1).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[1]="""","""",VLOOKUP(RC[1],DM_SP!R2C2:R9999C7,6,0))")
            .Offset(, 7).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-5]="""","""",VLOOKUP(RC[-5],DONGIA!R2C7:R9998C10,4,0))")
            .Offset(, 8).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-4]/RC[-1],"""")")
            .Offset(, 9).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-7]="""","""",VLOOKUP(RC[-7],DM_SP!R2C2:R999C7,3,0))")
            .Offset(, 10).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-8]="""","""",VLOOKUP(RC[-8],DM_SP!R2C2:R999C7,4,0))")
            .Offset(, 11).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-9]="""","""",VLOOKUP(RC[-9],DM_SP!R2C2:R999C7,4,0))")
            .Offset(, 75).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-15]+RC[-16]+RC[-17],0)")
            .Offset(, 82).FormulaR1C1 = GetFormual(rngTempA, "=SUMIFS(BC_NGAYSX!R5C12:R9940C12,BC_NGAYSX!R5C3:R9940C3,RC[-79])")
            .Offset(, 83).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-14]="""","""",IF(RC[-1]="""",""CN"",IFERROR(RC[-2]/RC[-1],0)))")
            .Offset(, 84).FormulaR1C1 = GetFormual(rngTempA, "=IF(RC[-5]<>"""",IFERROR(RC[-5]/RC[-2],""""),IFERROR(RC[-10]/RC[-2],""""))")
            .Offset(, 85).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-1]/RC[-78],"""")")
            .Offset(, 86).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-12]/RC[-11],"""")")
            .Offset(, 87).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(2*RC[-1]/(RC[-78]+RC[-77]),"""")")
            .Offset(, 92).FormulaR1C1 = GetFormual(rngTempA, "=RC[-6]")
            .Offset(, 93).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-19]/(RC[-34]+RC[-33]),"""")")
            .Offset(, 94).FormulaR1C1 = GetFormual(rngTempA, "=IF(AND(RC[-94]<>"""",R[-1]C<>""""),R[-1]C+1,IF(AND(RC[-94]<>"""",R[-1]C=""""),1,""""))")
            .Offset(, 95).FormulaR1C1 = GetFormual(rngTempA, "=IF(AND(RC[1]<>"""",RC[2]<>"""",RC[3]<>"""",RC[4]<>""""),""x"","""")")
            .Offset(, 81).FormulaR1C1 = GetFormual(rngTempA, "=IF(AND(RC[-7]="""",RC[-2]=""""),"""",IF(RC[-7]=RC[-2],""ÐÚNG"",""SAI""))")
            .Offset(, 58).FormulaR1C1 = GetFormual(rngTempA, "=IFERROR(RC[-32]+RC[-31]+RC[-30]+RC[-29]+RC[-28]+RC[-27]+RC[-26]+RC[-25]+RC[-24]+RC[-23]+RC[-22]*0.1+RC[-21]*0.035+RC[-20]+RC[-19]+RC[-18]+RC[-17]+RC[-16]+RC[-15]+RC[-14]+RC[-13]+RC[-12]+RC[-11]+RC[-10]+RC[-9]+RC[-8]+RC[-7]+RC[-6]+RC[-5]*1+RC[-4],0)")
        
        End With
        
         rngTempA.Resize(, 100).Borders.LineStyle = 1
      
    Next
Thoat:
    Set rngA = Nothing
    Set rngTempA = Nothing
    
    Exit Sub
Loi:
    MsgBox Err.Description
    Resume Thoat
    

End Sub
 
không thấy chạy code bác ơi
Bác xem code nhé
Bạn đưa file chỉ có 1 sheet, trong khi công thức của bạn lấy dữ liệu của rất nhiều sheet khác khi edit cột A.
Bạn xem file này, tôi không tính đến cột A nhé.
Các cột bạn muốn định dạng kiểu "hh:mm - dd/mm" thì thực hiện 1 lần trên sheet, đâu cần mỗi lần mỗi Format.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cll As Range, Tg As Variant
    Tg = Now
If Not Intersect(Target, Range("C4:C99999")) Is Nothing Then
    For Each Cll In Target
        Cll.Offset(, 3).ClearContents
        If Cll.Value <> "" Then Cll.Offset(, 3).Value = Tg 'Cll.Offset(, 3).Value
    Next Cll
   
ElseIf Not Intersect(Range("N4:Y99999"), Target) Is Nothing Then
    For Each Cll In Target
        If Cll.Value <> Empty Then Cells(Cll.Row, 98).Value = Tg
    Next Cll
   
ElseIf Not Intersect(Range("bh4:bk99999"), Target) Is Nothing Then
    For Each Cll In Target
        If Cll.Value <> Empty Then Cells(Cll.Row, 99).Value = Tg
    Next Cll

ElseIf Not Intersect(Range("bl4:bo99999"), Target) Is Nothing Then
    For Each Cll In Target
        If Cll.Value <> Empty Then Cells(Cll.Row, 100).Value = Tg
    Next Cll

'ElseIf Not Intersect(Target, Range("A4:A50000")) Is Nothing Then
    'For Each Cll In Target
        'With Cll
            '.Offset(, 1).FormulaR1C1 = "=IF(RC[1]="""","""",VLOOKUP(RC[1],DM_SP!R2C2:R9999C7,6,0))"
            '.Offset(, 7).FormulaR1C1 = "=IF(RC[-5]="""","""",VLOOKUP(RC[-5],DONGIA!R2C7:R9998C10,4,0))"
            '.Offset(, 8).FormulaR1C1 = "=IFERROR(RC[-4]/RC[-1],"""")"
            '.Offset(, 9).FormulaR1C1 = "=IF(RC[-7]="""","""",VLOOKUP(RC[-7],DM_SP!R2C2:R999C7,3,0))"
            '.Offset(, 10).FormulaR1C1 = "=IF(RC[-8]="""","""",VLOOKUP(RC[-8],DM_SP!R2C2:R999C7,4,0))"
            '.Offset(, 11).FormulaR1C1 = "=IF(RC[-9]="""","""",VLOOKUP(RC[-9],DM_SP!R2C2:R999C7,4,0))"
            '.Offset(, 75).FormulaR1C1 = "=IFERROR(RC[-15]+RC[-16]+RC[-17],0)"
            '.Offset(, 82).FormulaR1C1 = "=SUMIFS(BC_NGAYSX!R5C12:R9940C12,BC_NGAYSX!R5C3:R9940C3,RC[-79])"
            '.Offset(, 83).FormulaR1C1 = "=IF(RC[-14]="""","""",IF(RC[-1]="""",""CN"",IFERROR(RC[-2]/RC[-1],0)))"
            '.Offset(, 84).FormulaR1C1 = "=IF(RC[-5]<>"""",IFERROR(RC[-5]/RC[-2],""""),IFERROR(RC[-10]/RC[-2],""""))"
            '.Offset(, 85).FormulaR1C1 = "=IFERROR(RC[-1]/RC[-78],"""")"
            '.Offset(, 86).FormulaR1C1 = "=IFERROR(RC[-12]/RC[-11],"""")"
            '.Offset(, 87).FormulaR1C1 = "=IFERROR(2*RC[-1]/(RC[-78]+RC[-77]),"""")"
            '.Offset(, 92).FormulaR1C1 = "=RC[-6]"
            '.Offset(, 93).FormulaR1C1 = "=IFERROR(RC[-19]/(RC[-34]+RC[-33]),"""")"
            '.Offset(, 94).FormulaR1C1 = "=IF(AND(RC[-94]<>"""",R[-1]C<>""""),R[-1]C+1,IF(AND(RC[-94]<>"""",R[-1]C=""""),1,""""))"
            '.Offset(, 95).FormulaR1C1 = "=IF(AND(RC[1]<>"""",RC[2]<>"""",RC[3]<>"""",RC[4]<>""""),""x"","""")"
            '.Offset(, 81).FormulaR1C1 = "=IF(AND(RC[-7]="""",RC[-2]=""""),"""",IF(RC[-7]=RC[-2],""ÐÚNG"",""SAI""))"
            '.Offset(, 58).FormulaR1C1 = "=IFERROR(RC[-32]+RC[-31]+RC[-30]+RC[-29]+RC[-28]+RC[-27]+RC[-26]+RC[-25]+RC[-24]+RC[-23]+RC[-22]*0.1+RC[-21]*0.035+RC[-20]+RC[-19]+RC[-18]+RC[-17]+RC[-16]+RC[-15]+RC[-14]+RC[-13]+RC[-12]+RC[-11]+RC[-10]+RC[-9]+RC[-8]+RC[-7]+RC[-6]+RC[-5]*1+RC[-4],0)"
        'End With
    'Next Cll
    'Target.Resize(, 100).Value = Target.Resize(, 100).Value
End If
End Sub
 
Lần chỉnh sửa cuối:
Bạn đưa file chỉ có 1 sheet, trong khi công thức của bạn lấy dữ liệu của rất nhiều sheet khác khi edit cột A.
Bạn xem file này, tôi không tính đến cột A nhé.
Các cột bạn muốn định dạng kiểu "hh:mm - dd/mm" thì thực hiện 1 lần trên sheet, đâu cần mỗi lần mỗi Format.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cll As Range, Tg As Variant
    Tg = Now
If Not Intersect(Target, Range("C4:C99999")) Is Nothing Then
    For Each Cll In Target
        Cll.Offset(, 3).ClearContents
        If Cll.Value <> "" Then Cll.Offset(, 3).Value = Tg 'Cll.Offset(, 3).Value
    Next Cll
 
ElseIf Not Intersect(Range("N4:Y99999"), Target) Is Nothing Then
    For Each Cll In Target
        If Cll.Value <> Empty Then Cells(Cll.Row, 98).Value = Tg
    Next Cll
 
ElseIf Not Intersect(Range("bh4:bk99999"), Target) Is Nothing Then
    For Each Cll In Target
        If Cll.Value <> Empty Then Cells(Cll.Row, 99).Value = Tg
    Next Cll

ElseIf Not Intersect(Range("bl4:bo99999"), Target) Is Nothing Then
    For Each Cll In Target
        If Cll.Value <> Empty Then Cells(Cll.Row, 100).Value = Tg
    Next Cll

'ElseIf Not Intersect(Target, Range("A4:A50000")) Is Nothing Then
    'For Each Cll In Target
        'With Cll
            '.Offset(, 1).FormulaR1C1 = "=IF(RC[1]="""","""",VLOOKUP(RC[1],DM_SP!R2C2:R9999C7,6,0))"
            '.Offset(, 7).FormulaR1C1 = "=IF(RC[-5]="""","""",VLOOKUP(RC[-5],DONGIA!R2C7:R9998C10,4,0))"
            '.Offset(, 8).FormulaR1C1 = "=IFERROR(RC[-4]/RC[-1],"""")"
            '.Offset(, 9).FormulaR1C1 = "=IF(RC[-7]="""","""",VLOOKUP(RC[-7],DM_SP!R2C2:R999C7,3,0))"
            '.Offset(, 10).FormulaR1C1 = "=IF(RC[-8]="""","""",VLOOKUP(RC[-8],DM_SP!R2C2:R999C7,4,0))"
            '.Offset(, 11).FormulaR1C1 = "=IF(RC[-9]="""","""",VLOOKUP(RC[-9],DM_SP!R2C2:R999C7,4,0))"
            '.Offset(, 75).FormulaR1C1 = "=IFERROR(RC[-15]+RC[-16]+RC[-17],0)"
            '.Offset(, 82).FormulaR1C1 = "=SUMIFS(BC_NGAYSX!R5C12:R9940C12,BC_NGAYSX!R5C3:R9940C3,RC[-79])"
            '.Offset(, 83).FormulaR1C1 = "=IF(RC[-14]="""","""",IF(RC[-1]="""",""CN"",IFERROR(RC[-2]/RC[-1],0)))"
            '.Offset(, 84).FormulaR1C1 = "=IF(RC[-5]<>"""",IFERROR(RC[-5]/RC[-2],""""),IFERROR(RC[-10]/RC[-2],""""))"
            '.Offset(, 85).FormulaR1C1 = "=IFERROR(RC[-1]/RC[-78],"""")"
            '.Offset(, 86).FormulaR1C1 = "=IFERROR(RC[-12]/RC[-11],"""")"
            '.Offset(, 87).FormulaR1C1 = "=IFERROR(2*RC[-1]/(RC[-78]+RC[-77]),"""")"
            '.Offset(, 92).FormulaR1C1 = "=RC[-6]"
            '.Offset(, 93).FormulaR1C1 = "=IFERROR(RC[-19]/(RC[-34]+RC[-33]),"""")"
            '.Offset(, 94).FormulaR1C1 = "=IF(AND(RC[-94]<>"""",R[-1]C<>""""),R[-1]C+1,IF(AND(RC[-94]<>"""",R[-1]C=""""),1,""""))"
            '.Offset(, 95).FormulaR1C1 = "=IF(AND(RC[1]<>"""",RC[2]<>"""",RC[3]<>"""",RC[4]<>""""),""x"","""")"
            '.Offset(, 81).FormulaR1C1 = "=IF(AND(RC[-7]="""",RC[-2]=""""),"""",IF(RC[-7]=RC[-2],""ÐÚNG"",""SAI""))"
            '.Offset(, 58).FormulaR1C1 = "=IFERROR(RC[-32]+RC[-31]+RC[-30]+RC[-29]+RC[-28]+RC[-27]+RC[-26]+RC[-25]+RC[-24]+RC[-23]+RC[-22]*0.1+RC[-21]*0.035+RC[-20]+RC[-19]+RC[-18]+RC[-17]+RC[-16]+RC[-15]+RC[-14]+RC[-13]+RC[-12]+RC[-11]+RC[-10]+RC[-9]+RC[-8]+RC[-7]+RC[-6]+RC[-5]*1+RC[-4],0)"
        'End With
    'Next Cll
    'Target.Resize(, 100).Value = Target.Resize(, 100).Value
End If
End Sub
Em xin lỗi là phải cắt đi 1 số bảng tính vì liên quan đến thông tin sản phẩm và số liệu, bác thông cảm.
Vì file này được dùng chung cho nhiều máy tính, e có định dạng trên excel nhưng hệ điều hành các máy quy chuẩn định dạng khác nhau (đa phần dạng mm/dd/yyyy) mà các máy đó ko cho phép chỉnh định dạng (sợ lỗi đến các phần mềm khác). Ta có thể định dạng giá trị biến Tg dạng dd/mm/yyyy luôn trong code trên của bác được không a?
 
Lần chỉnh sửa cuối:
Em xin lỗi là phải cắt đi 1 số bảng tính vì liên quan đến thông tin sản phẩm và số liệu, bác thông cảm.
Vì file này được dùng chung cho nhiều máy tính, e có định dạng trên excel nhưng hệ điều hành các máy quy chuẩn định dạng khác nhau (đa phần dạng mm/dd/yyyy) mà các máy đó ko cho phép chỉnh định dạng (sợ lỗi đến các phần mềm khác). Ta có thể định dạng giá trị biến Tg dạng dd/mm/yyyy luôn trong code trên của bác được không a?
Bạn tự làm thử được mà. Vì trong code của bạn đã biết dùng NumberFormat
 
Tôi đã nói là tôi không xem code của bạn. Bạn nói là tập tin đã chạy đúng, chỉ còn mỗi khoản C:C, N:Y, BH:BK, BL:BO. Vậy tôi làm cho bạn phần đấy thôi.
không thấy chạy code bác ơi
Tôi đã nói là tôi không chơi trò "đoán ý đồng đội"

Im re? Chạy nhưng ra kết quả sai? Chạy thì "bùm"?

Hãy viết kiểu: Tôi chạy code thì thấy chỗ này nó thế này, chỗ kia nó thế kia, mà đúng phải là: chỗ này nó thế kia, chỗ kia nó thế này. Vân vân và phân vân.

May quá đã có người làm cho bạn. Tôi rút lui.
 
Tôi đã nói là tôi không xem code của bạn. Bạn nói là tập tin đã chạy đúng, chỉ còn mỗi khoản C:C, N:Y, BH:BK, BL:BO. Vậy tôi làm cho bạn phần đấy thôi.

Tôi đã nói là tôi không chơi trò "đoán ý đồng đội"

Im re? Chạy nhưng ra kết quả sai? Chạy thì "bùm"?

Hãy viết kiểu: Tôi chạy code thì thấy chỗ này nó thế này, chỗ kia nó thế kia, mà đúng phải là: chỗ này nó thế kia, chỗ kia nó thế này. Vân vân và phân vân.

May quá đã có người làm cho bạn. Tôi rút lui.
Không phải đâu bác ơi, tại e không biết diễn giải ý như thế nào nên e copy nguyên đoạn code e sửa và test khi change cột C (dạng copy nhiều dữ liệu) thì code ko chạy. :wounded1:
 
Không phải đâu bác ơi, tại e không biết diễn giải ý như thế nào
Không biết diễn giải? Không biết nói một câu: "Tôi copy cùng lúc vào C7:C10 4 giá trị a, b, c, d nhưng trong cột F không thấy xuất hiện ngày"?

Dạng copy nhiều dữ liệu? Bạn vẫn không biết cho ví dụ cụ thể à?

Nếu tôi không lầm thì code
Mã:
Set rngA = Intersect(Target, Range("C4:C99999"))
If Not rngA Is Nothing Then
    rngA.Offset(, 3).ClearContents
    For Each rngTempA In rngA
        If rngTempA.Value <> "" Then
            rngTempA.Offset(, 3).Value = Now()
            rngTempA.Offset(, 3).NumberFormat = "hh:mm - dd/mm"
        End If
    Next
End If
phục vụ cả dán, xóa nhiều dữ liệu.
 
Web KT

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

Back
Top Bottom