View Single Post
 
Old 06-05-2014, 08:56 AM
jpb103's Avatar
jpb103 jpb103 is offline Windows 7 64bit Office 2007
Advanced Beginner
 
Join Date: May 2014
Location: Thunder Bay, Ontario
Posts: 58
jpb103 is on a distinguished road
Default

Solved. Code follows:
Worksheet code:
Code:
'///////////////////////////////////////////////////////////
'///////WorkSheet_Change - Highlight changed cells//////////
'///////////////////////////////////////////////////////////
Private Sub Worksheet_Change(ByVal Target As Range)
'Set range
Const WS_RANGE As String = "A12:AG100"
'Error handler
On Error GoTo ws_exit:
Application.EnableEvents = False
If Not Intersect(Target, Me.Range(WS_RANGE)) Is Nothing Then
    With Target
        With .Interior
            'Set cell fill color on change
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent6
            .TintAndShade = 0.599993896298105
            .PatternTintAndShade = 0
        End With
    End With
End If
ws_exit:
Application.EnableEvents = True
'Save worksheet for undo
Call ThisWorkbook.ClearRedoLevel
Call ThisWorkbook.MakeUndoLevel
End Sub
'//////////////////////END//////////////////////////////////
 
'///////////////////////////////////////////////////////////
'///////Clear_Changes -> Set sheet cell color to none///////
'///////////////////////////////////////////////////////////
Sub Clear_Changes()
    'Set range
    Range("A12:AG100").Select
    With Selection.Interior
        'Set fill color to none for cell range
        .Pattern = xlNone
    End With
End Sub
'//////////////////////END//////////////////////////////////
 
'///////////////////////////////////////////////////////////
'////Clear_Selected_Cell -> Revert cell color to none///////
'///////////////////////////////////////////////////////////
Sub Clear_Selected_Cell()
    With Selection.Interior
        .Pattern = xlNone
    End With
End Sub
'//////////////////////END//////////////////////////////////
Workbook code:
Code:
Option Explicit
'Declare global variables
Dim UndoLevel As Long
Dim RedoLevel As Long
'///////////////////////////////////////////////////////////
'//////Workbook_BeforeClose - Delete undo/redo worksheets///
'///////////////////////////////////////////////////////////
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim Counter As Long
    'Clean up workbook by deleting hidden worksheets before close
    ActiveWorkbook.Application.DisplayAlerts = False
    If ActiveWorkbook.Sheets.Count > 1 Then
        For Counter = (ActiveWorkbook.Sheets.Count - 2) To 0 Step -1
            Sheets(CStr(Counter)).Delete
        Next
    End If
    ActiveWorkbook.Application.DisplayAlerts = True
End Sub
'////////////////////////////END////////////////////////////
 
'///////////////////////////////////////////////////////////
'//////Workbook_Open - Set initial undo/redo levels and/////
'////////////////save an initial undo level.////////////////
'///////////////////////////////////////////////////////////
Private Sub Workbook_Open()
    'Initialize global variables
    UndoLevel = 0
    RedoLevel = 0
    'Save a copy of initial worksheet
    Call MakeUndoLevel
End Sub
'////////////////////////////END////////////////////////////
 
'///////////////////////////////////////////////////////////
'//////MakeUndoLevel - Save a copy of the worksheet and/////
'/////////////////////////hide it.//////////////////////////
'///////////////////////////////////////////////////////////
Public Sub MakeUndoLevel()
    'Copy active worksheet
    Sheets("TBGS").Select
    Sheets("TBGS").Copy After:=Sheets(1)
    'Rename and hide copied worksheeet
    Sheets("TBGS (2)").Select
    Sheets("TBGS (2)").Name = CStr(UndoLevel)
    Sheets(CStr(UndoLevel)).Select
    ActiveWindow.SelectedSheets.Visible = False
    'Increment undo level
    UndoLevel = UndoLevel + 1
End Sub
'////////////////////////////END////////////////////////////
 
'///////////////////////////////////////////////////////////
'/////////UndoAction - undo the most recent change//////////
'///////////////////////////////////////////////////////////
Public Sub UndoAction()
If UndoLevel <> 1 Then
    'Restore last saved undo worksheet
    Sheets(CStr(UndoLevel - 2)).Copy After:=Sheets(1)
    Sheets((CStr(UndoLevel - 2) + " (2)")).Visible = True
    ActiveWorkbook.Application.DisplayAlerts = False
    Sheets("TBGS").Delete
    ActiveWorkbook.Application.DisplayAlerts = True
    Sheets((CStr(UndoLevel - 2) + " (2)")).Name = "TBGS"
    'Decrement undo level
    UndoLevel = UndoLevel - 1
    'Increment redo level
    RedoLevel = RedoLevel + 1
Else
    MsgBox "There is nothing to undo!"
End If
End Sub
'////////////////////////////END////////////////////////////
 
'///////////////////////////////////////////////////////////
'//////RedoAction - redo a change that has been undone//////
'///////////////////////////////////////////////////////////
Public Sub RedoAction()
If RedoLevel <> 0 Then
    'Restore next saved redo worksheet
    Sheets(CStr(UndoLevel)).Visible = True
    ActiveWorkbook.Application.DisplayAlerts = False
    Sheets("TBGS").Delete
    ActiveWorkbook.Application.DisplayAlerts = True
    Sheets(CStr(UndoLevel)).Name = "TBGS"
    Call MakeUndoLevel
    'Decrement redo level
    RedoLevel = RedoLevel - 1
Else
    MsgBox "There is nothing to redo!"
End If
End Sub
'////////////////////////////END////////////////////////////
 
'///////////////////////////////////////////////////////////
'////////ClearRedoLevel - Sets the RedoLevel to 0///////////
'///////////////////////////////////////////////////////////
Public Sub ClearRedoLevel()
    Dim Counter As Long
    For Counter = (RedoLevel + UndoLevel - 1) To UndoLevel Step -1
        ActiveWorkbook.Application.DisplayAlerts = False
        'Delete saved redo worksheets
        Sheets(CStr(Counter)).Delete
        ActiveWorkbook.Application.DisplayAlerts = False
    Next
    RedoLevel = 0
End Sub
'////////////////////////////END////////////////////////////
Reply With Quote