Hi all, hope everyone is ok during these times.
I started VBA literally a week ago.
Writing my first program I am pretty happy with but there is 1 section that bugs me as there must be a more efficient way to do it.
The program is the following :
SelectDay:
If SelectedMonth = "May" Then
Countdowntoday = (SelectedDay + 30) - ActiveCell.value + 1
Else
If SelectedMonth = "Jul" Then
Countdowntoday = (SelectedDay + 30) - ActiveCell.value + 1
Else
If SelectedMonth = "Oct" Then
Countdowntoday = (SelectedDay + 30) - ActiveCell.value + 1
Else
If SelectedMonth = "Dec" Then
Countdowntoday = (SelectedDay + 30) - ActiveCell.value + 1
Else
Countdowntoday = (SelectedDay + 31) - ActiveCell.value + 1
End If
End If
End If
End If
Return
As you can see, there is a lot of If statements inside one another.
SelectedMonth is a label defined by Left(ActiveCell.Value, 3) so that will change per run of this subroutine.
When I tried to use
IF SelectedMonth = "May" OR "Jul" OR "Oct" OR "Dec"
it comes up with a type mismatch, I tried to use Dim to define the SelectedMonth as string but that didn't seem to help. Is there another way to word this to make it more efficient? I mean this currently works but I want to improve my techniques.
My second problem is that at the end of my program I have a list of labels to addresses. I want to make a formulae using only the column from these addresses. For example, I want cell W1 to equal Sum(13,Column of cell 1 : 13,Column of cell 2). This is because the cells will move along my template to nearly any cell above row 13 but the calculations I do are always from the range of the starting cell to the final cell.
Below is the section of code that references these cells, as you can see i use =ActiveCell.Address to apply that current address within the label at the time.
'Use December inputs
'Overtime Start Date
MonthQuery = Sheets("input").Range("F17")
GoSub SelectMonth
GoSub DetermineWks
DayQuery = Sheets("input").Range("E17")
GoSub DetermineDayQueryNum
GoSub SelectWeek
GoSub SelectDay
DecStartDate = ActiveCell.Address(0, 0)
'Overtime Finish Date
MonthQuery = Sheets("input").Range("H17")
GoSub SelectMonth
GoSub DetermineWks
DayQuery = Sheets("input").Range("G17")
GoSub DetermineDayQueryNum
GoSub SelectWeek
GoSub SelectDay
DecFinishDate = ActiveCell.Address(0, 0)
I've been scratching my head over the second issue for a day now, and I think its currently due to my lack of knowing what options I have available to me at the current moment, rather than not knowing what I want to achieve or how I want it. I will keep trying my own methods in the meantime and will post if I find a solution. Albeit, it may be another very inefficient one.
Thank you in advance for your help.
Bookmarks