Gavin Harrison
New Member
- Joined
- May 2, 2017
- Messages
- 34
Hi Guys.
I only understand basic vba code and have taken over a project at work which involves what I think is quite advanced vba. I just wondered if a kind expert had 15 minutes to in some way explain what each line basically does, then hopefully I will be able to work with it.
Much Appreciated, I know its a big ask....
Sub AutoAllocation()
If MsgBox("Warning! Any Existing TM Allocations will be Overwritten", vbOKCancel, "Warning!") = vbOK Then
Application.ScreenUpdating = False
Sheets("Allocations").Select
ActiveSheet.Unprotect "password"
Range(Cells(49, 1), Cells(748, 1)).ClearContents
Sheets("Allocation Calcs").Select
ActiveSheet.Unprotect "password"
Set TMs = Cells(7, 10)
Set HotelRooms = Cells(9, 10)
Set Proportion = Cells(10, 10)
LastRow = 4
Range(Cells(5, 19), Cells(704, 19)).ClearContents
For i = 1 To TMs
Cells(2, 10) = i
HKTotal = 0
Cells(13, 10) = HKTotal
NewHKTotal = 0
Cells(14, 10) = NewHKTotal
Cells(16, 10) = 0
TargetHrs = Cells(6, 10) * Cells(11, 10) * Cells(10, 10)
For j = LastRow - 3 To HotelRooms
If (Cells(4 + j, 16) <> "Make" And Cells(4 + j, 16) <> "Depart" And Cells(4 + j, 16) <> "Change") Or Cells(16, 10) = 1 Then
Else: NewHKTotal = HKTotal + Cells(4 + j, 18)
Cells(14, 10) = NewHKTotal
olddiff = TargetHrs - HKTotal
newdiff = TargetHrs - NewHKTotal
If olddiff > 0 And newdiff < 0 Then
If Abs(olddiff) > Abs(newdiff) Then
Cells(4 + j, 19) = I
LastRow = 4 + j
Cells(16, 10) = 1
Else:
If Cells(4 + j, 19) = 0 Then
Cells(4 + j, 19) = i
Cells(16, 10) = 1
Else: Cells(16, 10) = 1
End If
End If
Else
Cells(4 + j, 19) = i
LastRow = 4 + j
HKTotal = NewHKTotal
Cells(13, 10) = HKTotal
End If
End If
Next
Next
ActiveSheet.protect "password"
Range(Cells(5, 20), Cells(704, 20)).Copy
Sheets("Allocations").Select
Cells(49, 1).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Cells(49, 1).Select
ActiveSheet.protect "password"
Application.ScreenUpdating = True
End If
End Sub
I only understand basic vba code and have taken over a project at work which involves what I think is quite advanced vba. I just wondered if a kind expert had 15 minutes to in some way explain what each line basically does, then hopefully I will be able to work with it.
Much Appreciated, I know its a big ask....
Sub AutoAllocation()
If MsgBox("Warning! Any Existing TM Allocations will be Overwritten", vbOKCancel, "Warning!") = vbOK Then
Application.ScreenUpdating = False
Sheets("Allocations").Select
ActiveSheet.Unprotect "password"
Range(Cells(49, 1), Cells(748, 1)).ClearContents
Sheets("Allocation Calcs").Select
ActiveSheet.Unprotect "password"
Set TMs = Cells(7, 10)
Set HotelRooms = Cells(9, 10)
Set Proportion = Cells(10, 10)
LastRow = 4
Range(Cells(5, 19), Cells(704, 19)).ClearContents
For i = 1 To TMs
Cells(2, 10) = i
HKTotal = 0
Cells(13, 10) = HKTotal
NewHKTotal = 0
Cells(14, 10) = NewHKTotal
Cells(16, 10) = 0
TargetHrs = Cells(6, 10) * Cells(11, 10) * Cells(10, 10)
For j = LastRow - 3 To HotelRooms
If (Cells(4 + j, 16) <> "Make" And Cells(4 + j, 16) <> "Depart" And Cells(4 + j, 16) <> "Change") Or Cells(16, 10) = 1 Then
Else: NewHKTotal = HKTotal + Cells(4 + j, 18)
Cells(14, 10) = NewHKTotal
olddiff = TargetHrs - HKTotal
newdiff = TargetHrs - NewHKTotal
If olddiff > 0 And newdiff < 0 Then
If Abs(olddiff) > Abs(newdiff) Then
Cells(4 + j, 19) = I
LastRow = 4 + j
Cells(16, 10) = 1
Else:
If Cells(4 + j, 19) = 0 Then
Cells(4 + j, 19) = i
Cells(16, 10) = 1
Else: Cells(16, 10) = 1
End If
End If
Else
Cells(4 + j, 19) = i
LastRow = 4 + j
HKTotal = NewHKTotal
Cells(13, 10) = HKTotal
End If
End If
Next
Next
ActiveSheet.protect "password"
Range(Cells(5, 20), Cells(704, 20)).Copy
Sheets("Allocations").Select
Cells(49, 1).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Cells(49, 1).Select
ActiveSheet.protect "password"
Application.ScreenUpdating = True
End If
End Sub