Posibles problemas en su código y soluciones
Validación incorrecta de la existencia de la carpeta
Dir(RutaCarpeta, vbDirectory) = "" no siempre es confiable para verificar si una carpeta existe. Es mejor usar Len(Dir(RutaCarpeta, vbDirectory)) = 0.
Intenta crear la carpeta de destino cada vez
Primero crea miNewRuta = miRuta & miCarpeta
Luego usa MkDir miNewRuta sin verificar si ya existe
No se genera correctamente un número correlativo para las imágenes
Todas las imágenes están siendo guardadas con el mismo nombre (F_1.jpg).
Para evitar sobreescrituras, necesita agregar un número incremental.
Private Sub Imagen1_DblClick(Cancel As Integer)
On Error GoTo CapturarError
Dim miRuta As String
Dim miCarpeta As String
Dim miNewRuta As String
Dim miArchivo As String
Dim fd As FileDialog
Dim RutaCarpeta As String
Dim i As Integer
Dim NombreBase As String
Dim NombreFinal As String
' Definir la ruta base de informes
RutaCarpeta = Application.CurrentProject.Path & "\Tools\OTClientes\Informes\"
' Verificar si la carpeta base existe
If Len(Dir(RutaCarpeta, vbDirectory)) = 0 Then
MkDir RutaCarpeta
MsgBox "Carpeta base creada: " & RutaCarpeta, vbInformation, "Atención"
End If
' Definir carpeta específica para la OT
miCarpeta = Me.NombreCarpeta
miNewRuta = RutaCarpeta & miCarpeta
' Verificar si la carpeta específica de la OT existe
If Len(Dir(miNewRuta, vbDirectory)) = 0 Then
MkDir miNewRuta
MsgBox "Carpeta creada: " & miNewRuta, vbInformation, "Atención"
End If
' Configurar cuadro de diálogo para seleccionar la imagen
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
.AllowMultiSelect = False
.InitialFileName = Application.CurrentProject.Path & "\Tools\OTClientes\Informes\ImagenesInforme"
.Filters.Add "Imágenes", "*.gif; *.jpg; *.jpeg; *.bmp", 1
If .Show = -1 Then
' Obtener el nombre base de la imagen sin extensión
NombreBase = Me.OT & "_F_"
' Buscar el siguiente número disponible
i = 1
Do While Dir(miNewRuta & "\" & NombreBase & i & ".jpg") <> ""
i = i + 1
Loop
' Definir el nombre final del archivo con número correlativo
NombreFinal = NombreBase & i & ".jpg"
' Copiar la imagen seleccionada con el nuevo nombre
FileCopy .SelectedItems(1), miNewRuta & "\" & NombreFinal
Me.RutaInicial1 = miNewRuta & "\" & NombreFinal
Me.IdPhoto1 = NombreFinal
Me.Imagen1.Picture = Me.RutaInicial1
DoCmd.RunCommand acCmdSaveRecord
DoCmd.RunCommand acCmdRefresh
MsgBox "Imagen guardada con éxito: " & NombreFinal, vbInformation, "Éxito"
End If
End With
Set fd = Nothing
Exit Sub
CapturarError:
MsgBox "Se ha producido el error Nº: " & Err.Number & " - " & Err.Description, vbExclamation, "Error"
End Sub
Explicación de las mejoras
Verifica correctamente si la carpeta ya existe
Usa Len(Dir(RutaCarpeta, vbDirectory)) = 0 en lugar de Dir(...) = "" para evitar errores.
Evita errores al crear la carpeta OT
Solo crea la carpeta si no existe.
Genera un número correlativo para cada imagen
Usa Dir() en un bucle Do While para encontrar el siguiente número disponible.
Corrige la asignación del nombre de la imagen
Evita que todas se llamen F_1.jpg, asegurando que sean únicas (F_1.jpg, F_2.jpg, etc.).
Refresca correctamente la imagen en el formulario
Me.Imagen1.Picture = Me.RutaInicial1 permite que la imagen se muestre inmediatamente