Group:  Microsoft Access ยป microsoft.public.access.macros
Thread: Argument problem

DotNetBag
.NET Development Newsgroups

HTVi
TV Discussion Newsgroups

Our Hot Pick: Rising Antivirus 2006 - Certified by TUV & Checkmark! Get 10% discount by entering this coupon code: ONDISCOUNT10
Rising Antivirus 2006

Argument problem
PeteyP 13.07.2006 15:11:01
Getting the 'type mismatch' error for this macro's function name action
argument and I don't know how to enter the requirements for defining dates,
although I have researched this as best I can. Can anyone help me out?
Thanks in advance.

The action argument is: WorkingDays2([Forms]![TestForm1]![Val1],[Forms]![TestForm1]![PlanD1]-[Forms]![TestForm1]![ActD1])

The name of the macro is WorkingDays2.
The name of the module is WorkingDays.
The name of the Function is WorkingDays2. In it, I am calculating the
number of business days between two dates. Using the macro, I am attempting
to show the difference on a form in a control named Val1.
RE: Argument problem
PeteyP 13.07.2006 15:37:02
And, by the way, the field for Val1 control is general number.

"PeteyP" wrote:

[Quoted Text]
> Getting the 'type mismatch' error for this macro's function name action
> argument and I don't know how to enter the requirements for defining dates,
> although I have researched this as best I can. Can anyone help me out?
> Thanks in advance.
>
> The action argument is:
> WorkingDays2([Forms]![TestForm1]![Val1],[Forms]![TestForm1]![PlanD1]-[Forms]![TestForm1]![ActD1])
>
> The name of the macro is WorkingDays2.
> The name of the module is WorkingDays.
> The name of the Function is WorkingDays2. In it, I am calculating the
> number of business days between two dates. Using the macro, I am attempting
> to show the difference on a form in a control named Val1.
Re: Argument problem
Steve Schapel <schapel[ at ]mvps.org.ns> 14.07.2006 08:46:45
Petey,

My guess is that you are using a RunCode action in your macro... Am I
right? If so, I think you need a = in front of the function name argument.

Apart from that, you will need to give more information. Since the
WorkingDays2() function is exclusive to your database, maybe you could
copy/paste the VBA code for this function into your return post, which
might help us to see what's happening. Also helpful to say what event
you are using to run this macro.

--
Steve Schapel, Microsoft Access MVP

PeteyP wrote:
[Quoted Text]
> Getting the 'type mismatch' error for this macro's function name action
> argument and I don't know how to enter the requirements for defining dates,
> although I have researched this as best I can. Can anyone help me out?
> Thanks in advance.
>
> The action argument is:
> WorkingDays2([Forms]![TestForm1]![Val1],[Forms]![TestForm1]![PlanD1]-[Forms]![TestForm1]![ActD1])
>
> The name of the macro is WorkingDays2.
> The name of the module is WorkingDays.
> The name of the Function is WorkingDays2. In it, I am calculating the
> number of business days between two dates. Using the macro, I am attempting
> to show the difference on a form in a control named Val1.
Re: Argument problem
PeteyP 14.07.2006 12:47:01
Thanks, Steve, for your willingness to look at this. Yes, I am using
RunCode and have tried it with both the = and without it; no success there.
The Event I'm using to kick off the macro is On Load, for the form control
properties. Here is the VB code:

Option Compare Database

Function WorkingDays2(StartDate As Date, EndDate As Date) As Integer
'....................................................................
' Name: WorkingDays2
' Inputs: StartDate As Date
' EndDate As Date
' Returns: Integer
' Author: Arvin Meyer
' Date: May 5,2002
' Comment: Accepts two dates and returns the number of weekdays between them
' Note that this function has been modified to account for holidays. It
requires a table
' named tblHolidays with a field named HolidayDate.
'....................................................................
On Error GoTo Err_WorkingDays2

Dim intCount As Integer
'Dim rst As DAO.Recordset
'Dim DB As DAO.Database

Set DB = CurrentDb
Set rst = DB.OpenRecordset("SELECT [HolidayDate] FROM tblHolidays",
dbOpenSnapshot)

'StartDate = StartDate + 1
'To count StartDate as the 1st day comment out the line above

intCount = 0

Do While StartDate <= EndDate

rst.FindFirst "[HolidayDate] = #" & StartDate & "#"
If Weekday(StartDate) <> vbSunday And Weekday(StartDate) <> vbSaturday Then
If rst.NoMatch Then intCount = intCount + 1
End If

StartDate = StartDate + 1

Loop

WorkingDays2 = intCount

Exit_WorkingDays2:
Exit Function

Err_WorkingDays2:
Select Case Err

Case Else
MsgBox Err.Description
Resume Exit_WorkingDays2
End Select

End Function

Thanks again.

"Steve Schapel" wrote:

[Quoted Text]
> Petey,
>
> My guess is that you are using a RunCode action in your macro... Am I
> right? If so, I think you need a = in front of the function name argument.
>
> Apart from that, you will need to give more information. Since the
> WorkingDays2() function is exclusive to your database, maybe you could
> copy/paste the VBA code for this function into your return post, which
> might help us to see what's happening. Also helpful to say what event
> you are using to run this macro.
>
> --
> Steve Schapel, Microsoft Access MVP
>
> PeteyP wrote:
> > Getting the 'type mismatch' error for this macro's function name action
> > argument and I don't know how to enter the requirements for defining dates,
> > although I have researched this as best I can. Can anyone help me out?
> > Thanks in advance.
> >
> > The action argument is:
> > WorkingDays2([Forms]![TestForm1]![Val1],[Forms]![TestForm1]![PlanD1]-[Forms]![TestForm1]![ActD1])
> >
> > The name of the macro is WorkingDays2.
> > The name of the module is WorkingDays.
> > The name of the Function is WorkingDays2. In it, I am calculating the
> > number of business days between two dates. Using the macro, I am attempting
> > to show the difference on a form in a control named Val1.
>
Re: Argument problem
Steve Schapel <schapel[ at ]mvps.org.ns> 14.07.2006 19:00:03
Petey,

Well, first thing is, there seems to be an error in the code for the
function, in that the two lines:
'Dim rst As DAO.Recordset
'Dim DB As DAO.Database
.... are commented out. Please remove the ' from the beginning of those
lines.

But the main thing is you have used invalid syntax in your call to the
function. If you look at the code for the WorkingDays2() function, you
will see that it takes 2 arguments, being a start date and an end date.
So what you have put...

WorkingDays2([Forms]![TestForm1]![Val1],[Forms]![TestForm1]![PlanD1]-[Forms]![TestForm1]![ActD1])
.... doesn't look right. Assuming you want the number of "working days"
between the PlanD1 and the ActD1, I think it should be like this...
WorkingDays2([Forms]![TestForm1]![PlanD1],[Forms]![TestForm1]![ActD1])

--
Steve Schapel, Microsoft Access MVP

PeteyP wrote:
[Quoted Text]
> Thanks, Steve, for your willingness to look at this. Yes, I am using
> RunCode and have tried it with both the = and without it; no success there.
> The Event I'm using to kick off the macro is On Load, for the form control
> properties. Here is the VB code:
>
> Option Compare Database
>
> Function WorkingDays2(StartDate As Date, EndDate As Date) As Integer
> '....................................................................
> ' Name: WorkingDays2
> ' Inputs: StartDate As Date
> ' EndDate As Date
> ' Returns: Integer
> ' Author: Arvin Meyer
> ' Date: May 5,2002
> ' Comment: Accepts two dates and returns the number of weekdays between them
> ' Note that this function has been modified to account for holidays. It
> requires a table
> ' named tblHolidays with a field named HolidayDate.
> '....................................................................
> On Error GoTo Err_WorkingDays2
>
> Dim intCount As Integer
> 'Dim rst As DAO.Recordset
> 'Dim DB As DAO.Database
>
> Set DB = CurrentDb
> Set rst = DB.OpenRecordset("SELECT [HolidayDate] FROM tblHolidays",
> dbOpenSnapshot)
>
> 'StartDate = StartDate + 1
> 'To count StartDate as the 1st day comment out the line above
>
> intCount = 0
>
> Do While StartDate <= EndDate
>
> rst.FindFirst "[HolidayDate] = #" & StartDate & "#"
> If Weekday(StartDate) <> vbSunday And Weekday(StartDate) <> vbSaturday Then
> If rst.NoMatch Then intCount = intCount + 1
> End If
>
> StartDate = StartDate + 1
>
> Loop
>
> WorkingDays2 = intCount
>
> Exit_WorkingDays2:
> Exit Function
>
> Err_WorkingDays2:
> Select Case Err
>
> Case Else
> MsgBox Err.Description
> Resume Exit_WorkingDays2
> End Select
>
> End Function
>
> Thanks again.
>
> "Steve Schapel" wrote:
>
>> Petey,
>>
>> My guess is that you are using a RunCode action in your macro... Am I
>> right? If so, I think you need a = in front of the function name argument.
>>
>> Apart from that, you will need to give more information. Since the
>> WorkingDays2() function is exclusive to your database, maybe you could
>> copy/paste the VBA code for this function into your return post, which
>> might help us to see what's happening. Also helpful to say what event
>> you are using to run this macro.
>>
>> --
>> Steve Schapel, Microsoft Access MVP
>>
>> PeteyP wrote:
>>> Getting the 'type mismatch' error for this macro's function name action
>>> argument and I don't know how to enter the requirements for defining dates,
>>> although I have researched this as best I can. Can anyone help me out?
>>> Thanks in advance.
>>>
>>> The action argument is:
>>> WorkingDays2([Forms]![TestForm1]![Val1],[Forms]![TestForm1]![PlanD1]-[Forms]![TestForm1]![ActD1])
>>>
>>> The name of the macro is WorkingDays2.
>>> The name of the module is WorkingDays.
>>> The name of the Function is WorkingDays2. In it, I am calculating the
>>> number of business days between two dates. Using the macro, I am attempting
>>> to show the difference on a form in a control named Val1.
Re: Argument problem
PeteyP 14.07.2006 19:35:02
OK, Steve, thank you. I took out the comments and learned to make sure that
DAO 3.6 Library is checked in the Tools|References area.

I also changed the call to read as you suggested. Happily everything opens
and runs without errors; unfortunately, no results are returned.

I'd understood from the comment lines that the code accepts two dates and
calculates the number of business days between them. How do the placeholders
in the code recognize my field names, Pland1 and ActD1 and how does the
function know that I want to show the result in a form control called Var1 ?

Thanks again.
Pete

"Steve Schapel" wrote:

[Quoted Text]
> Petey,
>
> Well, first thing is, there seems to be an error in the code for the
> function, in that the two lines:
> 'Dim rst As DAO.Recordset
> 'Dim DB As DAO.Database
> .... are commented out. Please remove the ' from the beginning of those
> lines.
>
> But the main thing is you have used invalid syntax in your call to the
> function. If you look at the code for the WorkingDays2() function, you
> will see that it takes 2 arguments, being a start date and an end date.
> So what you have put...
>
> WorkingDays2([Forms]![TestForm1]![Val1],[Forms]![TestForm1]![PlanD1]-[Forms]![TestForm1]![ActD1])
> .... doesn't look right. Assuming you want the number of "working days"
> between the PlanD1 and the ActD1, I think it should be like this...
> WorkingDays2([Forms]![TestForm1]![PlanD1],[Forms]![TestForm1]![ActD1])
>
> --
> Steve Schapel, Microsoft Access MVP
>
> PeteyP wrote:
> > Thanks, Steve, for your willingness to look at this. Yes, I am using
> > RunCode and have tried it with both the = and without it; no success there.
> > The Event I'm using to kick off the macro is On Load, for the form control
> > properties. Here is the VB code:
> >
> > Option Compare Database
> >
> > Function WorkingDays2(StartDate As Date, EndDate As Date) As Integer
> > '....................................................................
> > ' Name: WorkingDays2
> > ' Inputs: StartDate As Date
> > ' EndDate As Date
> > ' Returns: Integer
> > ' Author: Arvin Meyer
> > ' Date: May 5,2002
> > ' Comment: Accepts two dates and returns the number of weekdays between them
> > ' Note that this function has been modified to account for holidays. It
> > requires a table
> > ' named tblHolidays with a field named HolidayDate.
> > '....................................................................
> > On Error GoTo Err_WorkingDays2
> >
> > Dim intCount As Integer
> > 'Dim rst As DAO.Recordset
> > 'Dim DB As DAO.Database
> >
> > Set DB = CurrentDb
> > Set rst = DB.OpenRecordset("SELECT [HolidayDate] FROM tblHolidays",
> > dbOpenSnapshot)
> >
> > 'StartDate = StartDate + 1
> > 'To count StartDate as the 1st day comment out the line above
> >
> > intCount = 0
> >
> > Do While StartDate <= EndDate
> >
> > rst.FindFirst "[HolidayDate] = #" & StartDate & "#"
> > If Weekday(StartDate) <> vbSunday And Weekday(StartDate) <> vbSaturday Then
> > If rst.NoMatch Then intCount = intCount + 1
> > End If
> >
> > StartDate = StartDate + 1
> >
> > Loop
> >
> > WorkingDays2 = intCount
> >
> > Exit_WorkingDays2:
> > Exit Function
> >
> > Err_WorkingDays2:
> > Select Case Err
> >
> > Case Else
> > MsgBox Err.Description
> > Resume Exit_WorkingDays2
> > End Select
> >
> > End Function
> >
> > Thanks again.
> >
> > "Steve Schapel" wrote:
> >
> >> Petey,
> >>
> >> My guess is that you are using a RunCode action in your macro... Am I
> >> right? If so, I think you need a = in front of the function name argument.
> >>
> >> Apart from that, you will need to give more information. Since the
> >> WorkingDays2() function is exclusive to your database, maybe you could
> >> copy/paste the VBA code for this function into your return post, which
> >> might help us to see what's happening. Also helpful to say what event
> >> you are using to run this macro.
> >>
> >> --
> >> Steve Schapel, Microsoft Access MVP
> >>
> >> PeteyP wrote:
> >>> Getting the 'type mismatch' error for this macro's function name action
> >>> argument and I don't know how to enter the requirements for defining dates,
> >>> although I have researched this as best I can. Can anyone help me out?
> >>> Thanks in advance.
> >>>
> >>> The action argument is:
> >>> WorkingDays2([Forms]![TestForm1]![Val1],[Forms]![TestForm1]![PlanD1]-[Forms]![TestForm1]![ActD1])
> >>>
> >>> The name of the macro is WorkingDays2.
> >>> The name of the module is WorkingDays.
> >>> The name of the Function is WorkingDays2. In it, I am calculating the
> >>> number of business days between two dates. Using the macro, I am attempting
> >>> to show the difference on a form in a control named Val1.
>
Re: Argument problem
Steve Schapel <schapel[ at ]mvps.org.ns> 14.07.2006 20:39:28
Pete,

Ah, ok, now I start to see what you are trying to achieve! :-)

I assume you have valid dates entered in the Pland1 and ActD1 controls
on the form. When you put references to these controls into the
arguments of the function, the function will use them as its StartDate
and EndDate variables, which is exactly what you want. If you want the
result to be shown in the Var1 textbox, then you should just nter the
function into the Control Source property of Var1 - with a = in front.
This is not a job for a macro after all. Also, since Var1 is on the
same form as Pland1 and ActD1, there is probably no need for the Forms!
reference. Just put the Control Source of Var1 like this...
=WorkingDays2([PlanD1],[ActD1])
Let us know how that goes.

--
Steve Schapel, Microsoft Access MVP

PeteyP wrote:
[Quoted Text]
> OK, Steve, thank you. I took out the comments and learned to make sure that
> DAO 3.6 Library is checked in the Tools|References area.
>
> I also changed the call to read as you suggested. Happily everything opens
> and runs without errors; unfortunately, no results are returned.
>
> I'd understood from the comment lines that the code accepts two dates and
> calculates the number of business days between them. How do the placeholders
> in the code recognize my field names, Pland1 and ActD1 and how does the
> function know that I want to show the result in a form control called Var1 ?
Re: Argument problem
PeteyP 14.07.2006 21:02:02
T H A N K Y O U S T E V E

Thanks to you, my week ended on an upbeat note!

"Steve Schapel" wrote:

[Quoted Text]
> Pete,
>
> Ah, ok, now I start to see what you are trying to achieve! :-)
>
> I assume you have valid dates entered in the Pland1 and ActD1 controls
> on the form. When you put references to these controls into the
> arguments of the function, the function will use them as its StartDate
> and EndDate variables, which is exactly what you want. If you want the
> result to be shown in the Var1 textbox, then you should just nter the
> function into the Control Source property of Var1 - with a = in front.
> This is not a job for a macro after all. Also, since Var1 is on the
> same form as Pland1 and ActD1, there is probably no need for the Forms!
> reference. Just put the Control Source of Var1 like this...
> =WorkingDays2([PlanD1],[ActD1])
> Let us know how that goes.
>
> --
> Steve Schapel, Microsoft Access MVP
>
> PeteyP wrote:
> > OK, Steve, thank you. I took out the comments and learned to make sure that
> > DAO 3.6 Library is checked in the Tools|References area.
> >
> > I also changed the call to read as you suggested. Happily everything opens
> > and runs without errors; unfortunately, no results are returned.
> >
> > I'd understood from the comment lines that the code accepts two dates and
> > calculates the number of business days between them. How do the placeholders
> > in the code recognize my field names, Pland1 and ActD1 and how does the
> > function know that I want to show the result in a form control called Var1 ?
>
Re: Argument problem
Steve Schapel <schapel[ at ]mvps.org.ns> 14.07.2006 21:05:17
Well, very happy to hear it, Pete. Best wishes with the rest of your
project.

--
Steve Schapel, Microsoft Access MVP


PeteyP wrote:
[Quoted Text]
> T H A N K Y O U S T E V E
>
> Thanks to you, my week ended on an upbeat note!
>
Re: Argument problem
PeteyP 14.07.2006 21:20:02
I may be celebrating too soon, altho my gratitude abounds each time I write
here.

The formula works if PlanD1 is less than (earlier) than ActD1. If the other
way around, get the Overflow error. I think maybe more code is required in
order to instruct Access what to do if the ActD1 is less than PlanD1.


"Steve Schapel" wrote:

[Quoted Text]
> Well, very happy to hear it, Pete. Best wishes with the rest of your
> project.
>
> --
> Steve Schapel, Microsoft Access MVP
>
>
> PeteyP wrote:
> > T H A N K Y O U S T E V E
> >
> > Thanks to you, my week ended on an upbeat note!
> >
>
Re: Argument problem
Steve Schapel <schapel[ at ]mvps.org.ns> 14.07.2006 21:31:52
Yes, Pete, it looks like the function assumes the dates will be
chronological. Rather than altering the code in the function itself, I
think I would be inclined to adjust in the expression you use. One
example...

=IIf([PlanD1]<[ActD1],WorkingDays2([PlanD1],[ActD1]),WorkingDays2([ActD1],[PlanD1]))

Does that do what you want?

--
Steve Schapel, Microsoft Access MVP

PeteyP wrote:
[Quoted Text]
> I may be celebrating too soon, altho my gratitude abounds each time I write
> here.
>
> The formula works if PlanD1 is less than (earlier) than ActD1. If the other
> way around, get the Overflow error. I think maybe more code is required in
> order to instruct Access what to do if the ActD1 is less than PlanD1.
Re: Argument problem
PeteyP 17.07.2006 14:24:02
Almost, Steve. Your solution is straightforward and simple. How can I make
the calulation return a negative value when [PlanD1]<[ActD1]? Will I need to
convert my dates into serial values?

Thanks for your continued help.

"Steve Schapel" wrote:

[Quoted Text]
> Yes, Pete, it looks like the function assumes the dates will be
> chronological. Rather than altering the code in the function itself, I
> think I would be inclined to adjust in the expression you use. One
> example...
>
> =IIf([PlanD1]<[ActD1],WorkingDays2([PlanD1],[ActD1]),WorkingDays2([ActD1],[PlanD1]))
>
> Does that do what you want?
>
> --
> Steve Schapel, Microsoft Access MVP
>
> PeteyP wrote:
> > I may be celebrating too soon, altho my gratitude abounds each time I write
> > here.
> >
> > The formula works if PlanD1 is less than (earlier) than ActD1. If the other
> > way around, get the Overflow error. I think maybe more code is required in
> > order to instruct Access what to do if the ActD1 is less than PlanD1.
>
Re: Argument problem
Steve Schapel <schapel[ at ]mvps.org.ns> 17.07.2006 19:40:32
Pete,

As for converting dates to serial values, the dates are already stored
in your database as numbers, and just shown in date format, so no
conversion applies.

Wel, I guess one way would be to re-write the WorkingDays function to
accommodate to this situation. More kludgy but effective approach would
be to simply force a minus...

=IIf([PlanD1]<[ActD1],-WorkingDays2([PlanD1],[ActD1]),WorkingDays2([ActD1],[PlanD1]))

:-)

--
Steve Schapel, Microsoft Access MVP

PeteyP wrote:
[Quoted Text]
> Almost, Steve. Your solution is straightforward and simple. How can I make
> the calulation return a negative value when [PlanD1]<[ActD1]? Will I need to
> convert my dates into serial values?
Re: Argument problem
PeteyP 17.07.2006 20:03:03
Thanks, Steve. I had no idea that could be done. I fiddled with it a dozen
different ways and read dozens of posts. So, I learned a lot in the
process, but you always had the exact answers needed. Thank you V E R Y
much.

Pete

"Steve Schapel" wrote:

[Quoted Text]
> Pete,
>
> As for converting dates to serial values, the dates are already stored
> in your database as numbers, and just shown in date format, so no
> conversion applies.
>
> Wel, I guess one way would be to re-write the WorkingDays function to
> accommodate to this situation. More kludgy but effective approach would
> be to simply force a minus...
>
> =IIf([PlanD1]<[ActD1],-WorkingDays2([PlanD1],[ActD1]),WorkingDays2([ActD1],[PlanD1]))
>
> :-)
>
> --
> Steve Schapel, Microsoft Access MVP
>
> PeteyP wrote:
> > Almost, Steve. Your solution is straightforward and simple. How can I make
> > the calulation return a negative value when [PlanD1]<[ActD1]? Will I need to
> > convert my dates into serial values?
>

Home | Search | Terms | Imprint | Contact
Newsgroups Reader - provided by WiredBox.Net