Problema con Array en generador de expresiones

Estoy intentando utilizar la siguiente formula en el generador de expresiones de access:

Expr1: dhAddWorkDaysA(5;[Tabla1]![Fecha inicio];Matriz(#10/02/2017#;#09/02/2017#))

El problema lo tengo en la Matriz (Array) el último argumento donde está esa matriz es opcional. Si no lo indico o no pongo matriz y solo indico una fecha no da problema ninguno. Pero no se como indicar la matriz. Me devuelve el error de: No coinciden los tipos de datos en la expresión de criterios.

Todos los campos tanto de tablas como de la consulta son fecha corta.

1 Respuesta

Respuesta
2

Si no me equivoco, cuando una función tiene un argumento de tipo ParamArray, los elementos del Array se meten directamente separados por coma o punto y coma (según tu configuración regional)

Por tanto, yo probaría así:

Expr1: dhAddWorkDaysA(5;[Tabla1]![Fecha inicio];#10/02/2017#;#09/02/2017#)

Ya me dirás.

Un saludo.


En ese caso me dice que la expresión tiene un nº incorecto de argumentos.

El ejemplo que el autor da para la fórmula es el siguiente:

Pero no consigo adaptarlo a mi configuración

Example:
    '   dhAddWorkDaysA(10, #2/9/2000#, Array(#2/16/2000#, #2/17/2000#))

Tal y como está definida la función, no consigo hacerla funcionar en una consulta ni en un cuadro de texto con el generador, a diferencia de por código...

De todas formas, te diré que me parece una forma un tanto "enrevesada" de calcular la fecha. Mira este ejemplo como alternativa: http://siliconproject.com.ar/neckkito/index.php/component/content/article/95-ejemplos-explicados/ejemplos-de-codigo/135-contar-dias-2 http://siliconproject.com.ar/neckkito/index.php/component/content/article/95-ejemplos-explicados/ejemplos-de-codigo/135-contar-dias-2 

Lo que tengo es una tabla con un campo de fecha inicial y un campo de fecha final. Necesito actualizar el valor de la fecha final sumando x días laborables. La forma que me copias, no veo manera de adaptarla a lo que necesito. La idea es: Una importación que me recoje la fecha inicial, calcular la fecha final en +5 días laborables y ese dato anexarlo a otra tabla. Lo estaba haciendo a partir de una consulta (de ahí la expresión en el campo) porque son varios registros, no uno solo. El problema lo tengo con los días de vacaciones, de ahí el array de la función que estaba usando.

Te copio la página de donde obtuve la función:

http://access.mvps.org/access/datetime/date0012.htm 

¿Y lo tienes que hacer necesariamente a través de una consulta? ¿No te serviría hacerlo por código VBA?

Encontré un forma de pasarle con el generador los festivos, y es tener una tabla con un campo de tipo Memo (o texto largo) con todos los festivos, separados por comas y sin las almohadillas (06/01/2017 , 28/02/2017, 16/03/2017)

Por ejemplo, si tu tabla se llama TFestivos y el campo Festivos, tu expresión sería:

Expr1: dhAddWorkDaysA(5;[Tabla1]![Fecha inicio];DBúsq("Festivos";"TFestivos"))

¡Gracias! Encontré otra forma de hacerlo más sencilla desde luego que la que estaba intentando. De todas formas probare lo que me planteas creando también una tabla con los días de vacaciones/festivos.

Copio el código por si a alguien más le es de utilidad.

Public Function AddWorkDays2(StartDate As Date, NumDays As Integer) As Date
  '...
  ' Name: AddWorkDays2
  ' Inputs: StartDate As Date
  ' NumDays As Integer
  ' Returns: Date
  ' Note that this function has been modified to account for holidays.
  ' It requires a table named tblHolidays with a field named HolidayDate.
  '....................................................................
  Dim rst As DAO.Recordset
  Dim dbs As DAO.Database
  Dim dtmCurr As Date
  Dim intCount As Integer
  On Error GoTo ErrHandler
  Set dbs = CurrentDb
  Set rst = dbs.OpenRecordset("tblHolidays", dbOpenSnapshot)
  intCount = 0
  dtmCurr = StartDate
  Do While intCount < NumDays
    dtmCurr = dtmCurr + 1
    If Weekday(dtmCurr, vbMonday) < 6 Then
      rst.FindFirst "[HolidayDate] = #" & Format(dtmCurr, "mm\/dd\/yyyy") & "#"
      If rst.NoMatch Then
        intCount = intCount + 1
      End If
    End If
  Loop
  AddWorkDays2 = dtmCurr
ExitHandler:
  rst.Close
  Set rst = Nothing
  Set dbs = Nothing
  Exit Function
ErrHandler:
  MsgBox Err.Description, vbExclamation
  Resume ExitHandler
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas