Error al copiar ruta de archivo en cuadro de texto

Estoy creando una Bd de teléfonos y tengo las fotos de los contactos en un cuadro de texto que es este

Al darle clic en el botón Contactos habré la carpeta donde se encuentran los contactos, lo que estoy intentando hacer es que al hacer clic en la foto del contacto se copiara la ruta de dicho contacto en el cuadro de texto Archivo que beis en la foto, y no lo consigo.

He creado esto no se si esta bien.

Option Compare Database
Option Explicit
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hWnd As LongPtr, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As LongPtr

y en doble clic en cuadro de texto Archivo esta otro.

Y me da este error.

Si alguien me puede decir el o los motivos.

3 respuestas

Respuesta
1

En el diseño del formulario, en código pega esto

Public Function buscaArchivo() As String
Dim fDialog As Office.FileDialog
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
With fDialog
.AllowMultiSelect = False
.ButtonName = "Seleccionar"
.Title = "Seleccionar el archivo"
.InitialFileName = Application.CurrentProject.Path
.InitialView = msoFileDialogViewDetails
.Filters.Clear
.Filters.Add "All files", "*.jpg"
If .Show = True Then
buscaArchivo = .SelectedItems(1)
Else
MsgBox "Ha pulsado el botón <Cancelar>."
End If
End With
End Function

Así te abrirá un "explorador" para que localices la foto en cuestión. Supongamos que el cuadro de texto se llama Archivo. En el evento Al hacer doble clic ponle

Dim vArchivo As String
    vArchivo = buscaArchivo()
    If IsNull(vArchivo) Or vArchivo = "" Then
        Exit Sub
    Else
        Me.Archivo.Value = vArchivo
    End If

Por cierto, por si no estuviera ya, en Herramientas-Referencias, activa la casilla Microsoft Office 16 object library, o menor dependiendo de la versión de office.

Respuesta
1

Carlos: Le estás poniendo el sondeo después de...

Prueba así:

If IsNull(Me.Archivo) Then

MsgBox "No has elegido ningún archivo"

Else

MiArchivo = Me.Archivo.Value

... y aquí el resto

Saludos >> Jacinto

Respuesta
1

El error te salta porque no tienes nada escrito en el cuadro de texto llamado Archivo. Lo puedes resolver cambiando la línea "Dim miArchivo as String" por "Dim miArchivo As Variant"

Hola de nuevo Jacinto.

he echo los cambios mencionados y ahora no hace absolutamente nada.

No se si me explique bien, en dicho formulario ya tengo el botón que habré la carpeta donde se encuentra la foto de los contacto, asta aquí funciona, lo que quiero es que al darle en la foto del usuario elegido se copie la ruta de este contacto en el campo  Archivo del formulario, así no tengo que copiarla a mano, para que se muestre la foto del contacto elegido en el formulario.

Gracias.

Vamos a ver Carlos:

Lo que estás haciendo, o mucho me equivoco, es aplicar estos dos ejemplos de la web de Neckkito: "¡Quiero navegar y seleccionar un archivo!" y "ShellExecute".

No sé dónde reside la complicación, pues ambos están perfectamente explicados, con los pasos a seguir y además con sendas BDs de ejemplo.

Cuando dices: "Al darle clic en el botón Contactos abre la carpeta donde se encuentran los contactos, lo que estoy intentando hacer es que al hacer clic en la foto del contacto se copiara la ruta de dicho contacto en el cuadro de texto Archivo que veis en la foto, y no lo consigo", creo que o te explicas mal, o no entendiste los ejemplos.

En el código del botón, tienes que tener algo similar a esto:

Dim vArchivo As String

vArchivo = buscaArchivo()

If IsNull(vArchivo) Or vArchivo = "" Then Exit Sub

Else

Me.Archivo.Value = vArchivo

End If

Pero lo que hace el código no es "abrir la carpeta" donde tienes las fotos, sino abrir una ventana de diálogo para elegir una, que no es lo mismo.

Obviamente, tienes que tener la función buscaArchivo() declarada, que imagino que sí, porque sobre ella iba esta pregunta: Error de compilación no se ha definido el tipo

Luego, al hacer doble click en el cuadro de texto, tienes el botón en el que te saltaba el error que pones en la imagen, y que se soluciona como te dije.

También, por si las moscas, te comento que todo esto funciona sólo si a tu cuadro de texto le has llamado "Archivo".

hola. Tienes razón lo que que comentas y he copiado las instrucciones del ejemplo y me produce este error .

Gracias.

¿Copiaste la función buscaArchivo()? Porque es lo que te dice el error...

esto es lo que copie.

Option Compare Database
Option Explicit

Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

En el cuadro de texto Archivo, esto

Private Sub Archivo_DblClick(Cancel As Integer)
Dim miArchivo As String
miArchivo = Me.Archivo.Value
If IsNull(miArchivo) Then Exit Sub
Call ShellExecute(Me.hwnd, "Open", miArchivo, "", "", 1)
End Sub

y en el boton esto.

Private Sub cmdNavegar_Click()
Dim vArchivo As String
'Asignamos el valor de la variable al archivo que seleccionemos al navegar.
'Para ello utilizamos la llamada a la función buscaArchivo
vArchivo = buscaArchivo()
'Una vez tenemos el archivo seleccionado (junto con su ruta completa) pasamos
'el valor al campo Archivo
If IsNull(vArchivo) Or vArchivo = "" Then
Exit Sub
Else
Me.Archivo.Value = vArchivo
End If
End Sub

Pues te falta copiar la función buscaArchivo()...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas