Page 1 of 1

[VBA]: TimeStamp เมื่อWorksheet_Change

Posted: Fri Oct 11, 2019 3:17 pm
by Botman03
สวัสดีครับพี่ๆ พอดีผมตั้งCodeไว้ว่า
- หากWorksheet_Change ที่Row 3,5 ให้ TimeStamp
- ให้ลบ Timestamp

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
Dim xCellColumn As Integer

xCellColumn = 3
If Target.Column = xCellColumn Then
Application.EnableEvents = False
Target.Offset(0, 1) = Format(Now, " hh:mm ")
Application.EnableEvents = True
End If
If Not Intersect(Target, Selection) Is Nothing Then
Selection.Offset(0, 1).Value = ClearContents
End If

xCellColumn = 5
If Target.Column = xCellColumn Then
Application.EnableEvents = False
Target.Offset(0, 1) = Format(Now, " hh:mm ")
Application.EnableEvents = True
End If
If Not Intersect(Target, Selection) Is Nothing Then
Selection.Offset(0, 1).Value = ClearContents
End If
End Sub

ปัญหาที่ติด : 1. เมื่อ Paste (Ctrl+D) ในแถว 3,5 VBA ลบ Timestamp ออก
2. ต้องการให้ เมื่อ Paste (Ctrl+D) VBA สร้าง Timestamp ในทุก1 Cell ถัดไป
3. สามารถ Run Macroได้ ขณะProtect sheet

Re: [VBA]: TimeStamp เมื่อWorksheet_Change

Posted: Fri Oct 11, 2019 8:04 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range
    If Target.Columns.Count > 1 Then Exit Sub
    If Target.Column = 3 Or Target.Column = 5 Then
        For Each r In Target
            If r.Value <> "" Then
                r.Offset(0, 1) = Format(Now(), "h:mm")
            Else
                r.Offset(0, 1).ClearContents
            End If
        Next r
    End If
End Sub
กรณีต้องการให้ทำงานเมื่อมีการป้องกันชีตกับงานลักษณะที่ต้องคัดลอกมาวางเอง จะต้องกำหนดไว้ล่วงหน้าว่าเซลล์ไหนที่ให้ทำงานได้ จะปลด Lock เซลล์เอาไว้ก่อน วิธีการคือเลือกเซลล์ที่ต้องการให้คีย์ได้ > คลิกขวา > Format Cells > ที่แถบ Protection ปลดเครื่องหมายที่ Locked