diff --git a/months.cls b/months.cls index fbf3496..330a7f4 100644 --- a/months.cls +++ b/months.cls @@ -21,6 +21,7 @@ Private vedit As String Private adjust() As Object Private jtext() As Variant Private basejson As Object +Private rollback As Boolean @@ -28,13 +29,21 @@ Private Sub Worksheet_Change(ByVal target As Range) If Not dumping Then + + If target.Columns.Count > 1 Then + MsgBox ("you can only change one column at a time - your change will be undone") + dumping = True + Application.Undo + dumping = False + Exit Sub + End If If Not Intersect(target, Range("E6:E17")) Is Nothing Then Call Me.mvp_adj If Not Intersect(target, Range("F6:F17")) Is Nothing Then Call Me.mvp_set If Not Intersect(target, Range("K6:K17")) Is Nothing Then Call Me.mvp_adj If Not Intersect(target, Range("L6:L17")) Is Nothing Then Call Me.mvp_set - 'If Not Intersect(Target, Range("Q6:Q17")) Is Nothing Then Call Me.ms_adj - 'If Not Intersect(Target, Range("R6:R17")) Is Nothing Then Call Me.ms_set + If Not Intersect(target, Range("Q6:Q17")) Is Nothing Then Call Me.ms_adj + If Not Intersect(target, Range("R6:R17")) Is Nothing Then Call Me.ms_set End If @@ -89,15 +98,102 @@ Sub ms_set() Dim i As Integer Call Me.get_sheet + Dim vp As String + vp = Sheets("month").Range("R2") For i = 1 To 12 - units(i, 4) = units(i, 5) - (units(i, 2) + units(i, 3)) - price(i, 4) = price(i, 5) - (price(i, 2) + price(i, 3)) - sales(i, 5) = units(i, 5) * price(i, 5) - sales(i, 4) = sales(i, 5) - (sales(i, 2) + sales(i, 3)) + If Round(sales(i, 5) - (sales(i, 2) + sales(i, 3)), 6) <> Round(sales(i, 4), 6) Then + sales(i, 4) = sales(i, 5) - (sales(i, 2) + sales(i, 3)) + Select Case vp + Case "volume" + If co_num(price(i, 5), 0) = 0 Then + MsgBox ("price cannot be -0- and also have sales - your change will be undone") + dumping = True + Application.Undo + dumping = False + Exit Sub + End If + 'reset price to original - delete these lines if a cascading effect is desired + 'price(i, 4) = 0 + 'price(i, 5) = price(i, 2) + price(i, 3) + 'calc volume change on original price + units(i, 5) = sales(i, 5) / price(i, 5) + units(i, 4) = units(i, 5) - (units(i, 2) + units(i, 3)) + Case "price" + If co_num(units(i, 5), 0) = 0 Then + MsgBox ("volume cannot be -0- and also have sales - your change will be undone") + dumping = True + Application.Undo + dumping = False + Exit Sub + End If + price(i, 5) = sales(i, 5) / units(i, 5) + price(i, 4) = price(i, 5) - (price(i, 2) + price(i, 3)) + Case Else + MsgBox ("error forcing sales with no offset specified - your change will be undone") + dumping = True + Application.Undo + dumping = False + Exit Sub + End Select + End If + Call Me.build_json(i) Next i - set_sheet + Me.crunch_array + Me.set_sheet + + +End Sub + +Sub ms_adj() + + Dim i As Integer + Call Me.get_sheet + Dim vp As String + vp = Sheets("month").Range("R2") + + For i = 1 To 12 + If Round(sales(i, 5), 6) <> Round(sales(i, 2) + sales(i, 3) + sales(i, 4), 6) Then + sales(i, 5) = sales(i, 4) + sales(i, 2) + sales(i, 3) + Select Case vp + Case "volume" + If co_num(price(i, 5), 0) = 0 Then + MsgBox ("price cannot be -0- and also have sales - your change will be undone") + dumping = True + Application.Undo + dumping = False + Exit Sub + End If + 'reset price to original + 'price(i, 4) = 0 + 'price(i, 5) = price(i, 2) + price(i, 3) + 'calc volume change on original price + units(i, 5) = sales(i, 5) / price(i, 5) + units(i, 4) = units(i, 5) - (units(i, 2) + units(i, 3)) + Case "price" + If co_num(units(i, 5), 0) = 0 Then + MsgBox ("volume cannot be -0- and also have sales - your change will be undone") + dumping = True + Application.Undo + dumping = False + Exit Sub + End If + price(i, 5) = sales(i, 5) / units(i, 5) + price(i, 4) = price(i, 5) - (price(i, 2) + price(i, 3)) + Case Else + MsgBox ("error forcing sales with no offset specified - your change will be undone") + dumping = True + Application.Undo + dumping = False + Exit Sub + End Select + End If + Call Me.build_json(i) + Next i + + Me.crunch_array + Me.set_sheet End Sub @@ -274,7 +370,7 @@ Sub build_json(ByVal pos As Integer) 'if something is changing If Round(units(pos, 4), 2) <> 0 Or Round(price(pos, 4), 8) <> 0 Or Round(sales(pos, 4), 8) <> 0 Then - Set adjust(pos) = basejson + Set adjust(pos) = JsonConverter.ParseJson(JsonConverter.ConvertToJson(basejson)) 'if there is no existing volume on the target month but units are being added If units(pos, 2) + units(pos, 3) = 0 And units(pos, 4) <> 0 Then 'add month @@ -326,7 +422,11 @@ Sub crunch_array() 'base tprice(1, 2) = tsales(1, 2) / tunits(1, 2) 'forecast - tprice(1, 5) = tsales(1, 5) / tunits(1, 5) + If tunits(1, 5) <> 0 Then + tprice(1, 5) = tsales(1, 5) / tunits(1, 5) + Else + tprice(1, 5) = 0 + End If 'adjust tprice(1, 3) = (tsales(1, 2) + tsales(1, 3)) / (tunits(1, 2) + tunits(1, 3)) - tprice(1, 2) 'current adjust @@ -334,3 +434,15 @@ Sub crunch_array() End Sub + +Sub cancel() + + Sheets("Orders").Select + +End Sub + +Sub reset() + + Call Me.load_sheet + +End Sub