Access - Error 2501 la acción OutputTto se cancelo

 
Vista:
sin imagen de perfil

Error 2501 la acción OutputTto se cancelo

Publicado por andres (42 intervenciones) el 06/02/2023 13:23:55
Buenas tengo un código sacado de internet y adaptado para que luego de ver un informe se exporte en pdf.
Tengo la carpeta creada Recibos, y de acuerdo al año y mes se va crendo para guardarse respectivamente.
Sí dentro de la carpeta Recibos no tengo nada creado el código funciona perfecto. Ahora si ya tengo creado otra sub carpeta e incluso archivos dentro de la misma me tira el error 2501.
Dejo el código a ver si pueden decir porque me tira ese error.
Desde ya agradezco su ayuda.

Dim nombrecarpeta As Long

Dim TempCarpeta As String


nombrecarpeta = Me.Cuot_ano

nombrecarpeta1 = Me.Cuot_mes

TempCarpeta = Dir("C:\Recibos\" & nombrecarpeta, vbDirectory)


If TempCarpeta = "" Then

MkDir "C:\Recibos\" & nombrecarpeta & ""

MkDir "C:\Recibos\" & nombrecarpeta & "\" & nombrecarpeta1


DoCmd.OpenForm "FormEmail", , , , acHidden

Forms!FormEmail!TxtDireccion = Forms!F_Selec_Pago!Jug_Mail

DoCmd.OpenReport "I_recibo", acViewPreview, , "Cuot_dni=" & Forms!F_Selec_Pago!Jug_Dni.Value & "", acHidden

DoCmd.OutputTo acReport, "I_Recibo", acFormatPDF, "C:\Recibos\" & nombrecarpeta & "\" & nombrecarpeta1 & "\" & Me.Cuot_dni & "_" & Format(Date, "dd-mm-yyyy") & "_" & Format(Now, "hh.nn.ss") & ".pdf" ' HAY DEBERAS PONER TU RUTA DONDE QUIERES QUE SE IMPORTE & "_" & Format(Now, "hh.nn.ss")

Forms!FormEmail!TxtArchivo = "C:\Recibos\" & nombrecarpeta & "\" & nombrecarpeta1 & "\" & Me.Cuot_dni & "_" & Format(Date, "dd-mm-yyyy") & ".pdf" 'Forms!F_Selec_Pago!Recibo_Nro


DoCmd.Close acReport, "I_Recibo"


Else

DoCmd.OpenForm "FormEmail", , , , acHidden

Forms!FormEmail!TxtDireccion = Forms!F_Selec_Pago!Jug_Mail

Forms!F_Selec_Pago!Recibo_Nro = "C:\Recibos\" & nombrecarpeta & "\" & nombrecarpeta1 & "\" & Forms!F_Selec_Pago!Jug_Dni & "_" & Format(Date, "dd-mm-yyyy") '******

DoCmd.OpenReport "I_recibo", acViewPreview, , "Cuot_dni=" & Forms!F_Selec_Pago!Jug_Dni.Value & "", acHidden

DoCmd.OutputTo acReport, "I_Recibo", acFormatPDF, "C:\Recibos\" & nombrecarpeta & nombrecarpeta1 & "\" & Me.Cuot_dni & "_" & Format(Date, "dd-mm-yyyy") & "_" & Format(Now, "hh.nn.ss") & ".pdf" ' HAY DEBERAS PONER TU RUTA DONDE QUIERES QUE SE IMPORTE & "_" & Format(Now, "hh.nn.ss")

Forms!FormEmail!TxtArchivo = "C:\Recibos\" & nombrecarpeta & "\" & nombrecarpeta1 & "\" & Me.Cuot_dni & "_" & Format(Date, "dd-mm-yyyy") & ".pdf" 'Forms!F_Selec_Pago!Recibo_Nro

DoCmd.Close acReport, "I_Recibo"



End If

1
2
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Error 2501 la acción OutputTto se cancelo

Publicado por Anonimo (3316 intervenciones) el 06/02/2023 15:04:07
El problema es no encuentra esta carpeta:

1
.... "C:\Recibos\" & nombrecarpeta & nombrecarpeta1 & "\" & Me.Cuot_dni  ....

Porque la ruta correcta es:

1
.... C:\Recibos\" & nombrecarpeta & "\" & nombrecarpeta1 & "\" & Me.Cuot_dni ....

Tal como se aprecia en la línea que sigue a la que delata el error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error 2501 la acción OutputTto se cancelo

Publicado por andres (42 intervenciones) el 06/02/2023 17:09:10
Hola, gracias por tu colaboración.
Lo corregí a lo que me dijiste pero me sigue dando el mismo error.
Si borro todas las subcarpeta que tiene la carpeta Recibos funciona.
3
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error 2501 la acción OutputTto se cancelo

Publicado por Anonimo (3316 intervenciones) el 06/02/2023 20:33:22
Si no existe la carpeta cuyo nombre esta en Me.Cuot_ano se sigue un proceso y si existe se sigue otro.

En cual de los dos se presenta el problema (sospecho del segundo, que es una replica del primero con una línea más)

En este segundo proceso se da por creada la primera carpeta pero no la segunda (nombrecarpeta1) , ¿esa carpeta existe o no existe cuando se produce el error?.

Seria interesante conocer que hay en la ruta de la carpeta cuando se produce el error y es fácil si (en la ventana de inmediato) se escribe esto:

1
?"C:\Recibos\" & nombrecarpeta & nombrecarpeta1 & "\" & Me.Cuot_dni & "_" & Format(Date, "dd-mm-yyyy") & "_" & Format(Now, "hh.nn.ss"

Y se verifica su existencia (o si le falta algún dato y por ello da el error)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error 2501 la acción OutputTto se cancelo

Publicado por andres (42 intervenciones) el 06/02/2023 20:55:30
En la carpeta Recibos si esta vacía no pasa nada ya existiendo una sub carpeta da error.
Observando lo que me planteaste note que mientras el informe pertenezca a el año y mes creado primero no hay problema ahora si tuviese que crear un nuevo año o un nuevo mes ahi da error.


Si C:\Recibos\ no tiene sub carpeta, funciona.

Ahora si C:\Recibos\2023\enero tiene creada sub carpeta no funciona


Espero me haya explicado.

Creo que el problema es el siguiente:


nombrecarpeta = Me.Cuot_ano 'Carpeta año Ej: 2023

nombrecarpeta1 = Me.Cuot_mes 'Carpeta mes Ej: enero

TempCarpeta = Dir("C:\Recibos\" & nombrecarpeta, vbDirectory) '


1* Sí tempCarpeta no existe tuviese que crearla? Si es así no me la crea.

Acá creo que puede estar el error, ya que TempCarpeta está creada y

If TempCarpeta = "" Then

MkDir "C:\Recibos\" & nombrecarpeta & ""

MkDir "C:\Recibos\" & nombrecarpeta & "\" & nombrecarpeta1


2* Creo que tuviese que crear un if colocando si nombrecarpeta existe que cree solo nombrecarpeta1

Me parece que puede estar por ahi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Joan
Val: 414
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Error 2501 la acción OutputTto se cancelo

Publicado por Joan (90 intervenciones) el 06/02/2023 22:12:29
Hola,

te adjunto código para las carpetas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim nombrecarpeta As String
Dim nombrecarpeta1 As String
Dim TempCarpeta As String
 
nombrecarpeta = Me.Cuot_ano
nombrecarpeta1 = Me.Cuot_mes
 
TempCarpeta = "C:\Recibos\" & nombrecarpeta & "\"
 
If Len(Dir(TempCarpeta, vbDirectory)) = 0 Then
 
MkDir TempCarpeta
 
If Len(Dir(TempCarpeta & nombrecarpeta1, vbDirectory)) = 0 Then
 
MkDir TempCarpeta & nombrecarpeta1
 
End If
End If
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error 2501 la acción OutputTto se cancelo

Publicado por andres (42 intervenciones) el 06/02/2023 22:43:06
Hola Joan antes que nada gracias por tu tiempo.
Recién lo probé y me sigue dando el mismo error.
Nose que puede estar pasando,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Joan
Val: 414
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Error 2501 la acción OutputTto se cancelo

Publicado por Joan (90 intervenciones) el 06/02/2023 22:52:11
Este código no da error, lo tienes más adelante.

Pruébalo solo y lo verás.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Error 2501 la acción OutputTto se cancelo

Publicado por andres (42 intervenciones) el 06/02/2023 23:49:27
Me creo una sola vez y después no me lo creo mas...
Se me esta quemando la cabeza...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error 2501 la acción OutputTto se cancelo

Publicado por Anonimo (3316 intervenciones) el 06/02/2023 23:42:52
Al revisar mi ultimo mensaje caí en la cuenta de que la línea que postee no era la correcta (tenia el primer error sin corregir).

No se como esta planteado el programa, si todo se basa en crear carpetas y en ellas archivos es muy fácil y si se verifica para cada archivo a crear se garantiza el éxito (siempre existirá la ruta).

Solo me preocupa la línea mas que hay en la alternativa 'ELSE'.

Con esa salvedad mas el apunte de que en [Forms!FormEmail!TxtArchivo] se guarda el nombre del archivo sin la hora+minuto+segundo (que es el nombre real).

1
2
3
4
5
6
7
8
9
10
11
12
13
Dim Ruta As String
Ruta = "C:\Recibos\"
If Dir(Ruta & Me.Cuot_Ano, vbDirectory) = "" Then MkDir Ruta & Me.Cuot_Ano
Ruta = Ruta & Me.Cuot_Ano & "\"
If Dir(Ruta & Me.Cuot_mes, vbDirectory) = "" Then MkDir Ruta & Me.Cuot_mes
Ruta = Ruta & Me.Cuot_mes & "\"
DoCmd.OpenForm "FormEmail", , , , acHidden
Forms!FormEmail!TxtDireccion = Forms!F_Selec_Pago!Jug_Mail
DoCmd.OpenReport "I_recibo", acViewPreview, , "Cuot_dni=" & Forms!F_Selec_Pago!Jug_Dni.Value & "", acHidden
Ruta = Ruta & Me.Cuot_dni & "_" & Format(Date, "dd-mm-yyyy")
DoCmd.OutputTo acReport, "I_Recibo", acFormatPDF, Ruta & "_" & Format(Now, "hh.nn.ss") & ".pdf"
Forms!FormEmail!TxtArchivo = Ruta & ".pdf"
DoCmd.Close acReport, "I_Recibo"


Personalmente lo crearía y guardaría sin parte horaria:

1
2
3
Ruta = Ruta & Me.Cuot_dni & "_" & Format(Date, "dd-mm-yyyy") & ".pdf"
DoCmd.OutputTo acReport, "I_Recibo", acFormatPDF, Ruta
Forms!FormEmail!TxtArchivo = Ruta


O lo crearía y guardaría con parte horaria :

1
2
3
Ruta = Ruta & Me.Cuot_dni & "_" & Format(Date, "dd-mm-yyyy")& "_" & Format(Now, "hh.nn.ss") & ".pdf"
DoCmd.OutputTo acReport, "I_Recibo", acFormatPDF, Ruta
Forms!FormEmail!TxtArchivo = Ruta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Error 2501 la acción OutputTto se cancelo

Publicado por andres (42 intervenciones) el 06/02/2023 23:57:04
Hola ahora lo veo, subo la base .
Le puse la hora a ver si se solucionaba pensando que se repetían los archivos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Error 2501 la acción OutputTto se cancelo

Publicado por Norberto (80 intervenciones) el 07/02/2023 10:36:12
Buenos días:

Para evitar problemas con la existencia de las carpetas, crea un módulo (no hace falta si ya tienes uno en el que tengas funciones y procedimientos varios) y en él pega el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Public Sub xMkDir(ByVal Path As String) 'Igual que MkDir pero comprueba si existe el directorio
    Dim Ruta As String, NuevaCarpeta As String, i As Integer
 
    'Estas variables se usan para que en error solo se muestre una vez y no
    'en cada una de las iteraciones.
    Static EsError As Boolean, it As Integer
 
    On Error GoTo xMkDir_Error
 
    If Right(Path, 1) = "\" Then Path = Left(Path, Len(Path) - 1) 'Quitamos un posible \ al final del path
 
    If Dir(Path, vbDirectory + vbHidden) <> "" Then Exit Sub 'Si ya existe, salimos
 
    i = InStrRev(Path, "\") 'Averiguanos dónde está la última \
    Ruta = Left(Path, i)  'La ruta es lo que está a su izquierda
    NuevaCarpeta = Mid(Path, i + 1) 'La nueva carpeta lo de su derecha
 
    it = it + 1 'Vamos a iniciar una nueva iteración de xMkDir
 
    If Left(Ruta, 2) = "\\" Then 'Es un recurso de red
        i = InStr(3, Ruta, "\")     'Averiguamos dónde acaba el nombre
        i = InStr(i + 1, Ruta, "\") 'del recurso compartido, que no se puede crear
        If i < Len(Ruta) Then 'Si la ruta es más que el nombre del \\servidor\recursocompartido\...
            xMkDir Ruta 'Llamamos recursivamente para crear la carpeta anterior
        End If
    Else    'Es una unidad local
        If Right(Ruta, 2) <> ":\" Then 'La ruta está una unidad local y quedan carpetas por recorrer
            xMkDir Ruta 'Llamamos recursivamente para crear la carpeta anterior
        End If
    End If
 
    'Hemos salido de una iteración de xMkDir
    it = it - 1
    If it = 0 Then EsError = False 'Borramos el valor de EsError antes de salir de la iteración de mayor nivel
 
    'Comprobamos que se haya creado la ruta anterior
    If Dir(Ruta & "*.*", vbDirectory + vbHidden) <> "" Then
        MkDir Ruta & NuevaCarpeta 'Creamos la última carpeta
    Else
        If Not EsError Then
            Error 52
        Else
            'Ya se na notificado el error en la anterior iteración. No valmos a volver a hacerlo.
        End If
    End If
    GoTo xMkDir_Fin
 
xMkDir_Error:
    If Err = 52 Then
        EsError = True
        MsgBox "No se ha podido acceder a la ruta especificada. " & _
               "Es posible que la unidad de disco local o el recurso compartido de red no existan." & _
               vbCrLf & vbCrLf & _
               Path
    Else
        On Error GoTo 0
        Resume
    End If
 
xMkDir_Fin:
 
End Sub

Usa la sintáxis xMkDir ruta carpeta para crear la carpeta. La diferencia ente este procedimiento y el original es que para crear una carpeta no hace falta que exista las precedentes, las crea también. Tampoco pasa nada si ya existe la carpeta a crear, no da error.

MdDir C:\Recibos\Enero\Pendientes. Crea la carpeta Pendientes si ya existen Recibos y Enero. En otro caso da error. También daría error si ya existe la carpeta Pendientes.

xMkDir C:\Recibos\Enero\Pendientes. Crea la carpeta Pendientes. Si no existieran Recibos y/o Enero, las crearía también y no daría error. En caso de que Pendientes ya existiera, tampoco daría error.

Un saludo,

Norberto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error 2501 la acción OutputTto se cancelo

Publicado por andres (42 intervenciones) el 07/02/2023 12:33:59
Hola, gracias por tu aporte, ni bien pueda lo pruebo.
Mirando lo que me mandaste creo un modulo pero no lo tengo que llamar?
No tengo mucho conocimiento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Error 2501 la acción OutputTto se cancelo

Publicado por Norberto (80 intervenciones) el 07/02/2023 12:45:56
Hola de nuevo:

Si ya tienes en tu proyecto un módulo con funciones y procedimientos de utilidad, simplemente pegas el código al final del mismo. Si no, crea un módulo, pegas el código y ya está. No tienes que hacer nada especial ya que el procedimiento está declarado de uso público. (Public Sub).

Un saludo,

Norberto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error 2501 la acción OutputTto se cancelo

Publicado por andres (42 intervenciones) el 07/02/2023 13:15:29
Acá de nuevo, lo pegué en un modulo que tengo pero no pasa nada?. Si podes explicarme un poco te agradezco.
en un mensaje deje la base si podes mirarla buenísimo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Error 2501 la acción OutputTto se cancelo

Publicado por Norberto (80 intervenciones) el 07/02/2023 13:45:24
Hola:

El procedimiento como tal no se va a poner a hacer nada por si solo. Debes llamarlo usando xMkDir Ruta antes de lanzar el DoCmd.OutputTo para evitar que no exista la carpeta y dé un error. Para mejorar el código, define una variable Ruta y otra Archivo. Antes de la de generar el pdf pones

Ruta = "C:\Recibos\" & nombrecarpeta & "\" & nombrecarpeta1
Archivo = Me.Cuot_dni & "_" & Format(Now, "dd-mm-yyyy_hh:nn:ss") & ".pdf

Así tendríamos separadas las dos partes y será más fácil encontrar si hay un error

Luego creamos la carpeta con xMkDir (para eso el código que te he puesto antes)

xMkDir Ruta

Y luego el OutputTo

DoCmd.OutputTo acReport, "I_Recibo", acFormatPDF, Ruta & "\" & Archivo

El conjunto quedaría así:

1
2
3
4
5
6
7
8
9
10
11
12
'En la zona de definiciones
...
    Dim Ruta As String, Archivo As String
...
 
'En el cuerpo del código
...
    Ruta = "C:\Recibos\" & nombrecarpeta & "\" & nombrecarpeta1
    Archivo = Me.Cuot_dni & "_" & Format(Now(), "dd-mm-yyyy_hh.nn.ss") & ".pdf
    xMkDir Ruta
    DoCmd.OutputTo acReport, "I_Recibo", acFormatPDF, Ruta & "\" & Archivo
...

Un saludo,

Norberto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error 2501 la acción OutputTto se cancelo

Publicado por andres (42 intervenciones) el 10/02/2023 12:33:34
Hola, excelente!! muchas gracias!! lo estuve probando a full y funciona perfecto!!.
Gracias!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar