Sửa lại code TỰ ĐỘNG NHẬP NGÀY THÁNG

Liên hệ QC

hoatinhyeu862000

Thành viên hoạt động
Tham gia
19/7/13
Bài viết
135
Được thích
3
Em có 1 file đã có đoạn code nếu mình cứ ghi bất kỳ cái gì vào cột B,C thì cột D sẽ tự hiện ngày hiện tại. Vấn đề của em là nếu ngày hôm sau em mà sửa cái gì đó ở cột B, C thì nó lại nhảy sang ngày hiện tại như vậy hơi "nguy hiểm" nên em muốn nhờ anh chị thêm đoạn code sau làm sao nó sẽ tự động ghi trong ngoặc đơn ngày tháng sửa chứ không thay thế ngày tháng vào đầu tiên trong trường hợp mình có tác động chỉnh sửa 2 dòng đó. em ví dụ
ngày ghi là 31/7/2013
ngày sửa sẽ là: 31/7/2013(1/8/2013)hoặc chỉ cần 1/8 thôi cũng đc
xin cảm ơn anh chị
 

File đính kèm

  • tudonghienngayghi.xls
    20.5 KB · Đọc: 16
"31/7/2013" là dữ liệu ngày
"31/7/2013(1/8/2013)hoặc chỉ cần 1/8 thôi cũng đc" không phải là dữ liệu ngày

Bạn cần thống nhất mình muốn gì?
 
Upvote 0
Mã của bạn là thế này

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Or Target.Column = 3 Then
Cells(Target.Row, 4) = Format(Now, "dd/mm/yyyy")
End If
End Sub

Sửa lại thế này
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Or Target.Column = 3 Then
Cells(Target.Row, 4) = Cells(Target.Row, 4) & Format(Now, "dd/mm/yyyy")
End If
End Sub



(thêm chữ màu đỏ). Có cái là hơi "xấu" vì nên có dấu mở đóng ngoặc hay đơn giản hơn là dấu phẩy. Có lẽ bạn xử lý thêm để mất cái xấu đó nha
 
Upvote 0
Thêm dấu ; cho dễ nhìn bạn ơi !
Cells(Target.Row, 4) = Cells(Target.Row, 4) & " ; " & Format(Now, "dd/mm/yyyy")
 
Upvote 0
Mở rộng thêm tí chút, giả dụ như mình có file công việc như thế này
image.JPG
Mỗi một hyperlink là 1 file công việc mình làm. Vấn đề là mình muốn mỗi lần thao tác trên file đó nếu như mình save thì nó sẽ update ngày, còn nều mình cũng thao tác trên đó nhưng ko save thì ngày vẫn ko thay đổi.
Mong nhận được sự giúp đỡ. Cảm ơn
 
Upvote 0
Cảm ơn các anh chị đã giúp đỡ tuy nhiên có 1 vấn đề xảy ra là nếu cứ mỗi 1 lần sửa nó lại đẻ ra 1 ngày mà nó sẽ k tự up ngày sửa như vậy nếu em sửa tầm 4 lần thì chắc cell đó phải rộng tầm gang tay mất hihi, xin anh chị giúp đỡ tiếp với ý tưởng thế này
lần 1 sửa: 1/1/2013(2/1/2013)
Lần 2 sẽ tự up vào chỗ trong ngoặc và thay thế 2/1/2013 bằng(giả sử) 3/1/2013
chứ đây nó gộp 1 đống 1/1/2013(2/1/2013)(3/1/2013) thế thì ăn đủ!
Cảm ơn anh chị
 

File đính kèm

  • tudonghienngayghi.xls
    22.5 KB · Đọc: 15
Upvote 0
Cảm ơn các anh chị đã giúp đỡ tuy nhiên có 1 vấn đề xảy ra là nếu cứ mỗi 1 lần sửa nó lại đẻ ra 1 ngày mà nó sẽ k tự up ngày sửa như vậy nếu em sửa tầm 4 lần thì chắc cell đó phải rộng tầm gang tay mất hihi, xin anh chị giúp đỡ tiếp với ý tưởng thế này
lần 1 sửa: 1/1/2013(2/1/2013)
Lần 2 sẽ tự up vào chỗ trong ngoặc và thay thế 2/1/2013 bằng(giả sử) 3/1/2013
chứ đây nó gộp 1 đống 1/1/2013(2/1/2013)(3/1/2013) thế thì ăn đủ!
Cảm ơn anh chị

Ngày tháng mà ghi kiểu đó thật chẳng ra làm sao cả ---> Mai này sao mà tính toán
Giải pháp của tôi: Ghi những thay đổi vào Comment
Code đại khái thế này:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim lTmp As Long, dLast As Date
  Dim rCel As Range, Comm As Comment
  On Error Resume Next
  If Target.Column = 2 Or Target.Column = 3 Then
    Set rCel = Cells(Target.Row, 4)
    With rCel
      If .Offset(, -1) <> "" Or .Offset(, -2) <> "" Then
        lTmp = CLng(.Value)
        If lTmp <= 0 Then
          .Value = Date: .NumberFormat = "dd-MMM-yyyy"
        ElseIf lTmp <> CLng(Date) Then
          Set Comm = .Comment
          If Comm Is Nothing Then
            .AddComment vbLf & Format(Date, "dd-MMM-yyyy")
          Else
            dLast = CDate(Mid(Comm.Text, InStrRev(Comm.Text, vbLf) + 1))
            If dLast <> Date Then Comm.Text Comm.Text & vbLf & Format(Date, "dd-MMM-yyyy")
          End If
        End If
      Else
        .ClearComments: .ClearContents
      End If
    End With
  End If
End Sub
Mời test thử
 
Upvote 0
Ngày tháng mà ghi kiểu đó thật chẳng ra làm sao cả ---> Mai này sao mà tính toán
Giải pháp của tôi: Ghi những thay đổi vào Comment
Code đại khái thế này:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim lTmp As Long, dLast As Date
  Dim rCel As Range, Comm As Comment
  On Error Resume Next
  If Target.Column = 2 Or Target.Column = 3 Then
    Set rCel = Cells(Target.Row, 4)
    With rCel
      If .Offset(, -1) <> "" Or .Offset(, -2) <> "" Then
        lTmp = CLng(.Value)
        If lTmp <= 0 Then
          .Value = Date: .NumberFormat = "dd-MMM-yyyy"
        ElseIf lTmp <> CLng(Date) Then
          Set Comm = .Comment
          If Comm Is Nothing Then
            .AddComment vbLf & Format(Date, "dd-MMM-yyyy")
          Else
            dLast = CDate(Mid(Comm.Text, InStrRev(Comm.Text, vbLf) + 1))
            If dLast <> Date Then Comm.Text Comm.Text & vbLf & Format(Date, "dd-MMM-yyyy")
          End If
        End If
      Else
        .ClearComments: .ClearContents
      End If
    End With
  End If
End Sub
Mời test thử
Tuyệt quá sư phụ à. cảm on thầy
 
Upvote 0
Web KT
Back
Top Bottom