zayas23
04-15-2020, 08:16 AM
Hi all,
I was hoping to get some help with this problem I'm having. I'm creating a training history spreadsheet for employees. I have the current year and the 2 previous years, so 2018, 2019, and 2020. Using VBA code, I'd like to automatically update these 3 years at the end of each year (when the date is 12/31/2020, 12/31/2021, etc. it updates the 3 years) so that its the current year and 2 previous. For example, 2018, 2019, 2020 would become 2019, 2020, 2021 and so on and so forth when the date of the current year is past 12/31/20XY. I'm trying to do this using if statements but am struggling with making it a loop and getting it to run every time the workbook is opened. I'm wondering if I should use while statements instead? Much of my trouble comes from only wanting to display the year for these columns but trying to compare it with a full date (2018 vs. 12/31/2020) and the fact that the starting years are in the past so I'd have to write some additional code to make up for this and get it on the right track starting 2021.
I'm currently practicing different blurbs of code on a random spread sheet right now to see line by line if its working or not and seeing what I need to adjust but I've run into a wall thought wise. I could just be overthinking it though. Anything helps!
I've attached my code below, I've also tried other ways but this is the most recent one I've been working on.
Sub test()
' This is an Excel VBA code designed to automatically update the workbook
' and display the most recent year and 2 years prior for trainings
' This code will automatically run upon opening the workbook
' This code will update the years after December 31st 20XX, therefore
' for each new year, information from the 3rd previous year
' should be recorded for future use so as not to lose any
' training histories
'------------------------------------------------------------------------
' Set initial year values for overall spreadsheet in first 3 columns
Dim Y1 As Variant
Y1 = 2018
Range("c10").Value = Y1
Range("d10").Value = Y1 + 1
Range("e10").Value = Y1 + 2
' Set current date to display in mm/dd/yyyy format
Dim currentdate As Date
currentdate = Date
Range("h10").Value = currentdate
' Set initial end of year date to display in mm/dd/yyyy format
Dim endofyear As Date
endofyear = CDate("12/31/2020")
Range("i10").Value = endofyear
Dim endofyear2 As Date
endofyear2 = DateSerial(2020, 12, 31)
Range("f15").Value = endofyear2
' This portion of the code is an if statement to determine whether or not
' the current date has past the end of year date
' If it has, the initial year values will all update by 1 or 2 year(s), if
' not they will remain the same
If currentdate < endofyear2 Then
Range("c10").Value = Range("c10").Value
Range("d10").Value = Range("c10").Value + 1
Range("e10").Value = Range("c10").Value + 2
Else:
Range("c10").Value = Range("c10").Value + 1
Range("d10").Value = Range("c10").Value + 1
Range("e10").Value = Range("c10").Value + 2
End If
End Sub
I was hoping to get some help with this problem I'm having. I'm creating a training history spreadsheet for employees. I have the current year and the 2 previous years, so 2018, 2019, and 2020. Using VBA code, I'd like to automatically update these 3 years at the end of each year (when the date is 12/31/2020, 12/31/2021, etc. it updates the 3 years) so that its the current year and 2 previous. For example, 2018, 2019, 2020 would become 2019, 2020, 2021 and so on and so forth when the date of the current year is past 12/31/20XY. I'm trying to do this using if statements but am struggling with making it a loop and getting it to run every time the workbook is opened. I'm wondering if I should use while statements instead? Much of my trouble comes from only wanting to display the year for these columns but trying to compare it with a full date (2018 vs. 12/31/2020) and the fact that the starting years are in the past so I'd have to write some additional code to make up for this and get it on the right track starting 2021.
I'm currently practicing different blurbs of code on a random spread sheet right now to see line by line if its working or not and seeing what I need to adjust but I've run into a wall thought wise. I could just be overthinking it though. Anything helps!
I've attached my code below, I've also tried other ways but this is the most recent one I've been working on.
Sub test()
' This is an Excel VBA code designed to automatically update the workbook
' and display the most recent year and 2 years prior for trainings
' This code will automatically run upon opening the workbook
' This code will update the years after December 31st 20XX, therefore
' for each new year, information from the 3rd previous year
' should be recorded for future use so as not to lose any
' training histories
'------------------------------------------------------------------------
' Set initial year values for overall spreadsheet in first 3 columns
Dim Y1 As Variant
Y1 = 2018
Range("c10").Value = Y1
Range("d10").Value = Y1 + 1
Range("e10").Value = Y1 + 2
' Set current date to display in mm/dd/yyyy format
Dim currentdate As Date
currentdate = Date
Range("h10").Value = currentdate
' Set initial end of year date to display in mm/dd/yyyy format
Dim endofyear As Date
endofyear = CDate("12/31/2020")
Range("i10").Value = endofyear
Dim endofyear2 As Date
endofyear2 = DateSerial(2020, 12, 31)
Range("f15").Value = endofyear2
' This portion of the code is an if statement to determine whether or not
' the current date has past the end of year date
' If it has, the initial year values will all update by 1 or 2 year(s), if
' not they will remain the same
If currentdate < endofyear2 Then
Range("c10").Value = Range("c10").Value
Range("d10").Value = Range("c10").Value + 1
Range("e10").Value = Range("c10").Value + 2
Else:
Range("c10").Value = Range("c10").Value + 1
Range("d10").Value = Range("c10").Value + 1
Range("e10").Value = Range("c10").Value + 2
End If
End Sub