Modules & VBA :: Executing Function Between Business Hours On Weekdays
Sep 13, 2013
What I am trying to do is execute a function M-F every 2 hours between 4am and 6pm. The 2 hour part was easy, I just created a form with a timer, but the other part isn't working so well, here is my latest attempt.
Code:
StrTime = Time()
If Not ((Weekday(Now()) = vbSaturday) Or (Weekday(Now()) = vbSunday)) And (StrTime > "4:00" Or StrTime < "18:00") Then
I need to calculate the difference between to datetime fields. However, i need to exclude weekends, holidays and non-business hours. I also need to return the result in hours, minutes, seconds.
can this be done. if so, does anyone know how to do this, or is there code that i can implement and save for future uses.
I have to create a query that will reflect the number of calls and messages a person has either taken during business hours and if a message was left how long did it take them to return the message. We are open from 6:00AM - 4:30PM so my boss wants to only see how many calls a person took during business hours. now the users have to run this report daily and monthly. and have to make it accessible through a report so they can send it to the supervisors.
The two fields I have to make the calculations on is the [Date & Time Left] the time the call was made [Date Returned] if they left a message the date it was returned. Also if the call was returned in one day she wants it broken down into minutes (as in how many hours and mins was the call returned)
This is what I have so far: I noticed there was something in Excel called NETWORKDAYS?
Code: SELECT [Message Tracking].[Date & Time Left], [Message Tracking].[Date Returned], DateDiff("h",[Date & Time Left],[Date Returned]) AS TotalHours, [Message Tracking].ID, [Message Tracking].[User Returning] FROM [Message Tracking] GROUP BY [Message Tracking].[Date & Time Left], [Message Tracking].[Date Returned], [Message Tracking].ID, [Message Tracking].[User Returning]
In my DB that we use and a workflow tool, some of our work has and due date and time.If we get the complete_package our work time starts and we have X amount of time to complete our work. This is something i worked on but set it aside, now i am coming back to try and fine tune this so it returns a more accurate value.
So if we receive and [Date_Complete_Package_Received] at 09/13/2014 09:00:00 AM and based on the work being done we have 5 hours to complete the work, then the [Date_and_Time_Complete_Package_DUE] would be 09/13/2014 02:00:00 AM. That part is simple and i have coding that does that just fine. [SLA_Time] is where it gets the amount of time allotted, we have 5,10,12,14,and 16 hours depending on what is being done.
This is done on AfterUpdate of a field on one of my forms and it works the way it is but what i need is to be able to run this through my Workhours Function so i am not getting values that our in off hours.The following doesn't work i know i can't use the Workhours function with the DateAdd but this is just to show what i am trying to do.
I have a query that calculates business days. However if my end date is missing the query has error codes because the date its looking for is null. Can show me were to put the nz function.
here's the module for the business days
Function Work_Days(BegDate As Variant, EndDate As Variant) As Integer
' "Calculating the workdays between Dates" ' Note that this function does account for holidays.
Dim WholeWeeks As Variant Dim DateCnt As Variant Dim EndDays As Integer
If Not IsNull(DLookup("HoliDate", "tblHolidays", "[HoliDate]=#" & DateCnt & "#")) Then EndDays = EndDays - 1 End If
If Format(DateCnt, "ddd") <> "Sun" And _ Format(DateCnt, "ddd") <> "Sat" Then EndDays = EndDays + 1 End If DateCnt = DateAdd("d", 1, DateCnt) Loop Work_Days = EndDays
End Function
and here's the query
SELECT [Reques_ID], Work_days([Date_Received],[To_Director]-1) AS Turnaround_To_Director, Work_days([To_Director],[From_Director]-1) AS Turnaround_From_Director, Work_days([To_VP],[From_VP]-1) AS Turnaround_From_VP, Work_days([Position_Number_Requested],[Position_Number_Recieved]-1) AS Turnaround_For_Position_Number, Work_days([Date_Received],[Approval_to_mgr]-1) AS Turnaround_EPS, Work_days([Date_Received],[JOIS_Posted_Date]-1) AS Turnaround_To_Posting, Work_days([Approval_to_mgr],[JOIS_Package_Return_Date]-1) AS Turnaround_For_Package_Return INTO tbl_turnaround FROM Artifact;
difficult to handle error when executing my report. I put a code into OnOpen section but ACCESS states:
Quote:
The expression OnOpen you entered as the event property produced the following error: A problem occurred while Microsoft Access was communicating with the OLE server or ActiveX Control.
Additionally it says in description:
This error occurs when an event has failed to run because the location of the logic for the event cannot be evaluated. For example, if the OnOpen property of a form is set to =[Field], this error occurs because a macro or event name is expected to run when the event occurs.
I am genuinely confused by that. I have also provided the code in the case if I am missing something I don't know yet. In a debug window, I have executed the code line by line and it worked. Whenever I try to open the report, the error occurs. Should I be aware of something when I write code for reports?
Below, the code in my report "module":
Code: Private Sub Report_Open(Cancel As Integer) Call CreateTempTable End Sub Private Sub CreateTempTable() On Error GoTo ErrorHandler Dim strTable As String
I m new 2 access, i have a query which i simply do not know how to handle. Please if anyone can help me:
I have a form having two dates on it, First is Invoice Date and the second is delivery date. What i wish to see is that automatically the invoice date takes date from system (this part is done), and the delivery date field automatically adds 2 more days to it and excludes weekend days, saturday and sunday. for example: a date of 6 July 2006 was picked by invoice date field from system, the delivery date now should add 2 more days to it plus it must not include weekend days in it, so the resulting date in delivery date field must read 10-Jul-2006.
I have a database (big surprise :rolleyes: ) and I need it to calculate and filter information based on a process name, a number of days for that process and a schedule date.
For the process NC Batch I need it to calculate out 15 working days from today excluding weekends and holidays and then find the records in the orders table that has a schedule date less than or equal to the returned date. I have a calendar in excel that does it with a look up.
I have a table listing holiday dates and a table listing processes and the corresponding day count.
In the query I currently have it listed as
[ScheduleDate]<=Date()+20.
but this will not take into account holidays and it includes weekends.
I know there are several threads on work day functions but I could not get any of them to adapt to my needs. Sorry.
I live and work in middle east. Here the weekend starts on Thursday and the week starts on Saturday. Thursday and friday are Off Days. Saturday is the first day of the week. I have a problem related to date calculations.
I have a form having two date fields on it.
1) INVOICE DATE 2) DELIVERY DATE
i wish to see that the INVOICE DATE automatically takes system date from system and same applies for DELIVERY DATE but the only difference will be that the DELIVERY DATE field automatically adds next two more days from the system date. If either of the next two days that are added to system date is/are weekend (thursday or Friday) then it must show the first available working day after the weekend.
for example: a date of 5 July 2006 was picked by INVOICE DATE field from system, the DELIVERY DATE field now should add 2 more working days to system date (it must not include weekend days in it), so the resulting date in delivery date field must read 09-Jul-2006.
I am sure that there are people who can solve my query
I'm an Access novice! I have a table with a library loan date field defaulting with today's date and a due back field. I want the due back field to show a date 3 weekdays after the loan date. I've tried using DateAdd("w",3,Date()) but this just adds 3 days, not weekdays. Does anyone know how do I get it to skip weekends? If I need to use VBA, please supply instructions for including the code, as well as the code itself. :confused:
I am trying to write a query that looks at groups of records for averages and maximums but the records are only from Mon-Fri (Trading Days). I have a query that runs everyday and compares today's close to see if it is greater than the maximum close of the last 20 trading days. I want to use between date()-21 and date()-1. BUT this will include weekends where there is no data.
QUESTION: Is there a way to say between the last 20 trading days(Mon-Fri)?
I researched dateadd() and found one place were it says that "w" is used for weekday. http://www.database-design-2000.com/dateadd.htm BUT when I did a simple query to see if it would exlude the weekends it doesn't. I will have no data for the weekends but if I am doing an average of the last three days and this is run on Monday, it will only include Monday and not the previous Thursday and Friday. Thanks for your help:)
I am trying to run a query from an ASP page, which also uses other queries. I get the following error message: [Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'Expr1' as part of an aggregate function, this is in qrySessionsEverything.
The query name is qrySessionsEverything. It executes the line:
SELECT * FROM qrySessionsEverything
The queries are below:
qrySessionsEverything SELECT tblSessions.SessionID AS Expr1, tblSessions.CourseID AS Expr2, tblCourses.CourseName AS Expr3, tblSessions.SessionDate AS Expr4, tblSessions.StartTime AS Expr5, tblSessions.EndTime AS Expr6, tblVenues.VenueID AS Expr7, tblVenues.VenueName AS Expr8, tblVenues.Capacity AS Expr9, tblVenues.Capacity-[bytAttendees] AS bytAvailablePlaces, qrySessionsAccepted.bytAttendees AS Expr10, tblVenues.Link AS Expr11, qrySessionsPending.Pending AS Expr12, [TrainerFirstName] & " " & [TrainerSurname] AS strTrainer, tblSessions.TrainerID AS Expr13 FROM tblTrainers, tblCourses, qrySessionsAccepted, qrySessionsPending, tblVenues, tblSessions GROUP BY tblSessions.SessionID, tblSessions.CourseID, tblCourses.CourseName, tblSessions.SessionDate, tblSessions.StartTime, tblSessions.EndTime, tblVenues.VenueID, tblVenues.VenueName, tblVenues.Capacity, qrySessionsAccepted.bytAttendees, tblVenues.Link, qrySessionsPending.Pending, [TrainerFirstName] & " " & [TrainerSurname], tblSessions.TrainerID;
qrySessionsAccepted SELECT tblSessions.SessionID AS Expr1, tblSessions.CourseID AS Expr2, tblSessions.SessionDate AS Expr3, tblSessions.StartTime AS Expr4, tblSessions.EndTime AS Expr5, tblSessions.VenueID AS Expr6, tblVenues.VenueName AS Expr7, tblVenues.Capacity AS Expr8, [Capacity]-[bytAttendees] AS bytAvailablePlaces, Count(qryDelegatesAccepted.DelegateID) AS bytAttendees, tblVenues.Link AS Expr9 FROM tblVenues, tblSessions, qryDelegatesAccepted GROUP BY tblSessions.SessionID, tblSessions.CourseID, tblSessions.SessionDate, tblSessions.StartTime, tblSessions.EndTime, tblSessions.VenueID, tblVenues.VenueName, tblVenues.Capacity, tblVenues.Link ORDER BY tblSessions.SessionDate, tblSessions.StartTime;
qrySessionsPending SELECT tblSessions.SessionID AS Expr1, tblSessions.CourseID AS Expr2, tblSessions.SessionDate AS Expr3, tblSessions.StartTime AS Expr4, tblSessions.EndTime AS Expr5, tblSessions.VenueID AS Expr6, tblVenues.VenueName AS Expr7, tblVenues.Capacity AS Expr8, tblVenues.Link AS Expr9, Count(qryDelegatesPending.SessionID) AS bytPending FROM tblVenues, tblSessions, qryDelegatesPending GROUP BY tblSessions.SessionID, tblSessions.CourseID, tblSessions.SessionDate, tblSessions.StartTime, tblSessions.EndTime, tblSessions.VenueID, tblVenues.VenueName, tblVenues.Capacity, tblVenues.Link ORDER BY tblSessions.SessionDate, tblSessions.StartTime;
qryDelegatesAccepted SELECT tblDelegates.DelID AS Expr1, tblDelegates.SessionID AS Expr2, tblDelegates.DelTitle AS Expr3, tblDelegates.DelFirstName AS Expr4, tblDelegates.DelSurname AS Expr5, tblDelegates.DelHospital AS Expr6, tblDelegates.DelDepartment AS Expr7, tblDelegates.DelPhone AS Expr8, tblDelegates.DelBleeper AS Expr9, tblDelegates.DelEmail AS Expr10, tblDelegates.DateSubmitted AS Expr11, tblDelegates.Accepted AS Expr12, tblDelegates.Rejected AS Expr13 FROM tblDelegates GROUP BY tblDelegates.DelegateID, tblDelegates.SessionID, tblDelegates.DelTitle, tblDelegates.DelFirstName, tblDelegates.DelSurname, tblDelegates.DelHospitall, tblDelegates.DelDepartment, tblDelegates.DelPhone, tblDelegates.DelBleeper, tblDelegates.DelEmail, tblDelegates.DateSubmitted, tblDelegates.Accepted, tblDelegates.Rejected HAVING (((tblDelegates.Accepted)=True) And ((tblDelegates.Rejected)<>True));
qryDelegatesPending SELECT tblDelegates.DelegateID AS Expr1, tblDelegates.SessionID AS Expr2, tblDelegates.DelTitle AS Expr3, tblDelegates.DelFirstName AS Expr4, tblDelegates.DelSurname AS Expr5, tblDelegates.DelHospitall AS Expr6, tblDelegates.DelDepartment AS Expr7, tblDelegates.DelPhone AS Expr8, tblDelegates.DelBleeper AS Expr9, tblDelegates.DelEmail AS Expr10, tblDelegates.DateSubmitted AS Expr11, tblDelegates.Accepted AS Expr12, tblDelegates.Rejected AS Expr13 FROM tblDelegates GROUP BY tblDelegates.DelegateID, tblDelegates.SessionID, tblDelegates.DelTitle, tblDelegates.DelFirstName, tblDelegates.DelSurname, tblDelegates.DelHospital, tblDelegates.DelDepartment, tblDelegates.DelPhone, tblDelegates.strDelegateBleep, tblDelegates.DelEmail, tblDelegates.DateSubmitted, tblDelegates.Accepted, tblDelegates.Rejected HAVING (((tblDelegates.Accepted)<>True) And ((tblDelegates.Rejected)<>True));
Hi, I am a beginner in access. I am trying to execute the below query through VBA on a click event on a Command Button in a Form. I am taking input parameter from Form, based on which I want the query result( dynamic Query Parameter). I getting the attached error message
Please help me out in executing this query in VBA. An example would be of great help. Thanks in advance..
I've searched for a solution, and the proposed solution didn't work for me.
I am executing an SQL statement to insert values into a History table when deleting a value in a subform. Two of the 5 values are asking me for parameters when the SQL executes and I cant figure out why! The datatypes they are inserting into are correct and I'm at a loss. The 2 values giving me grief are Manufacturer and Model.
I was wandering if it is possible to implicitly execute code upon the opening of a database? If so how do I do this? I have code to convert the page settings of a report from a command click but wanted this to be done automatically...
I have a mainform with a search function so the user can select a record to view and update. The selected record is displayed in Subform1 on Page1 of a tab control. The record source of this form is Query1. Page2 of the tab control contains Subform2; record source is the result of Query1 joined to Query2.
The forms correctly displays, updates and adds records my problem occurs when I add VBA code to the BeforeUpdate event of a control on Subform1. The code appears to execute once for each page in the tab control.
Has anyone any suggestions on how I can correct my problem.
I am having trouble in implementing the TreeCtrl structure. I have a simple database for testing purpose and I am not able to make it work. There appears to be a problem with the bookmark property and I get an error message: "can't Add child:Arguments are of wrong Type, are out of acceptable range, or are in conflict with one another".
I have attached the database here and could you please see what is wrong with my code.
I have a Visible form and an Invisible (visible=false) form open at the same time. Is it possible to use a button on the visible form to execute the code behind a button in the invisible form. The subroutine on the invisible form is Public. I tried DoCmd.RunCommand and a macro with RunCode but... nada...
(There is a valid reason for this approach but i will spare you the boring explanation. I can think of a work around where I can bypass this need, but this way is cleaner (there are cases where the invisible form is visible and used directly, the form has data which is sent to a report to create a label). I have done everything else with VBA code but for some reason can't get this to work, so now i am obsessed)
Hi, I try to execute an update command i.e.: UPDATE Results set Data = 'Heiner's key' where ValidationNumber = 1 and TestNumber = 2 and Line = 'E1'. Access does not let me do this because the “'” in Heiner's terminates the update string prematurely. Does anyone have a suggestion how to do this? Thank you.
I am looking to check, whether i would be able to "add an Message box with a "Message : "Executes all queries all is well.mdb before executing this query ?" , if yes, continue executing the query, else, Exit out of the database?
I am trying to execute query every midnight at 00:05 and append data into a table. This query reads the data from a linked table and appends the records into the local table.
Access doesn't triggers so I have no clue which way to proceed.
Can anybody help me creating a logic to execute query at midnight?