Spaces:
Sleeping
Sleeping
| Attribute VB_Name = "ClearSheet" | |
| Option Explicit | |
| ' Clear Sheet: archive data from row 2+, clear contents, remove duplicate highlights. | |
| ' No success popup; only show a message if an error occurs. | |
| Public Sub ClearSheetData() | |
| Dim ws As Worksheet | |
| Dim lastRow As Long, lastCol As Long | |
| Dim dataRange As Range, dataArr As Variant | |
| Dim archiveWs As Worksheet, archiveLast As Long | |
| Dim c As Range | |
| Dim i As Long | |
| Dim previousEnableEvents As Boolean | |
| On Error GoTo ErrorHandler | |
| Set ws = ActiveSheet | |
| previousEnableEvents = Application.EnableEvents | |
| Application.EnableEvents = False | |
| On Error Resume Next | |
| Set c = ws.Cells.Find( _ | |
| What:="*", _ | |
| After:=ws.Cells(1, 1), _ | |
| LookIn:=xlFormulas, _ | |
| LookAt:=xlPart, _ | |
| SearchOrder:=xlByRows, _ | |
| SearchDirection:=xlPrevious _ | |
| ) | |
| On Error GoTo ErrorHandler | |
| If c Is Nothing Then | |
| ClearDuplicateHighlights ws | |
| GoTo Cleanup | |
| End If | |
| lastRow = c.Row | |
| If lastRow <= 1 Then | |
| ClearDuplicateHighlights ws | |
| GoTo Cleanup | |
| End If | |
| On Error Resume Next | |
| Set c = ws.Cells.Find( _ | |
| What:="*", _ | |
| After:=ws.Cells(1, 1), _ | |
| LookIn:=xlFormulas, _ | |
| LookAt:=xlPart, _ | |
| SearchOrder:=xlByColumns, _ | |
| SearchDirection:=xlPrevious _ | |
| ) | |
| On Error GoTo ErrorHandler | |
| If c Is Nothing Then | |
| lastCol = 1 | |
| Else | |
| lastCol = c.Column | |
| End If | |
| Set dataRange = ws.Range(ws.Cells(2, 1), ws.Cells(lastRow, lastCol)) | |
| dataArr = dataRange.Value | |
| ReDim Preserve dataArr(1 To UBound(dataArr, 1), 1 To lastCol + 1) | |
| For i = 1 To UBound(dataArr, 1) | |
| dataArr(i, lastCol + 1) = Now | |
| Next i | |
| On Error Resume Next | |
| Set archiveWs = ThisWorkbook.Sheets("Cleared Data") | |
| On Error GoTo ErrorHandler | |
| If archiveWs Is Nothing Then | |
| Set archiveWs = ThisWorkbook.Sheets.Add(After:= _ | |
| ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) | |
| archiveWs.Name = "Cleared Data" | |
| End If | |
| If Application.WorksheetFunction.CountA(archiveWs.Cells) = 0 Then | |
| archiveLast = 0 | |
| Else | |
| archiveLast = archiveWs.Cells.Find(What:="*", _ | |
| After:=archiveWs.Cells(1, 1), _ | |
| SearchOrder:=xlByRows, _ | |
| SearchDirection:=xlPrevious).Row | |
| End If | |
| If archiveLast = 0 Then | |
| For i = 1 To lastCol | |
| archiveWs.Cells(1, i).Value = ws.Cells(1, i).Value | |
| Next i | |
| archiveWs.Cells(1, lastCol + 1).Value = "Cleared Timestamp" | |
| archiveLast = 1 | |
| End If | |
| archiveWs.Range( _ | |
| archiveWs.Cells(archiveLast + 1, 1), _ | |
| archiveWs.Cells(archiveLast + UBound(dataArr, 1), lastCol + 1) _ | |
| ).Value = dataArr | |
| ' Clear contents only — preserves layout, borders, fonts, and other formatting. | |
| dataRange.ClearContents | |
| ClearDuplicateHighlights ws | |
| Cleanup: | |
| Application.EnableEvents = previousEnableEvents | |
| Exit Sub | |
| ErrorHandler: | |
| Application.EnableEvents = previousEnableEvents | |
| MsgBox "Clear Sheet could not be completed." & vbCrLf & _ | |
| Err.Description, vbCritical, "Clear Sheet" | |
| End Sub | |