If I understand what you are looking for (your sample data was "16 July to 15 Aug") you will want to do the following.
1) On form "FormForDates" set the default value for EndDate to be Date() to replicate what you are currently doing.
2) Set the tab order to have EndDate be the first field the user enters.
3) Add the following code to the BeforeUpdate event for EndDate
Dim DaysInMont As Integer
Dim CurYear As Integer
Dim CurMonth As Integer
Dim CurDay As Integer
'Start by taking the date apart.
CurYear = DatePart("yyyy", Me.EndDate)
'Use the previous month,
CurMonth = DatePart("m", Me.EndDate) - 1
'and set the Start day as the day AFTER the current one
CurDay = DatePart("d", Me.EndDate) + 1
'Make sure we know the maximum number of days in the previous month.
DaysInMonth = DatePart("d", DateSerial(DatePart("yyyy", Me.EndDate), DatePart("m", Me.EndDate), 0))
'If we would be using a date that doesn't exist, use the last day of the month.
If DaysInMonth < CurDay Then CurDay = DaysInMonth
'Once we have the pieces, set the start date.
Me.StartDate = DateSerial(CurYear, CurMonth, CurDay)
This SHOULD give you what you want and allow an end user to change either the start or end date as needed. If you want them to keep a previous StartDate that they've type in you will need to check if there is a value in Me.StartDate before running this code.
If you always need ONLY 30 days, you can replace this with a simple
Me.StartDate = Me.EndDate -30
but I know most businesses don't always want 30 days.