estoy de acuerdo John M tiene mejor respuesta a OP pregunta. Aunque no se haya expresado explícitamente, el objetivo aparente es obtener un nombre de archivo seleccionado, mientras que otras respuestas devuelven recuentos o listas. Sin embargo, agregaría que el msofiledialogfilepicker podría ser una mejor opción en este caso. es decir:
Dim f As object
Set f = Application.FileDialog(msoFileDialogFilePicker)
dim varfile as variant
f.show
with f
.allowmultiselect = false
for each varfile in .selecteditems
msgbox varfile
next varfile
end with
Nota: el valor de varfile seguirá siendo el mismo desde multiselect es falsa (de una sola prenda cada vez seleccionado). Utilicé su valor fuera del ciclo con igual éxito. Sin embargo, es una mejor práctica hacerlo como lo hizo John M. Además, el selector de carpetas se puede usar para obtener una carpeta seleccionada. Siempre prefiero el enlace tardío, pero creo que el objeto es nativo de la biblioteca de acceso predeterminada, por lo que puede no ser necesario aquí
+1 Siempre esperé que esto fuera posible, la clave para hacer el último trabajo de enlace está pasando la opción numérica en lugar de msoOpenFileDialog, etc. Tan simple como una gran respuesta:) –
Puede, pero no debería. Con el enlace tardío, está codificando en la oscuridad. Cuando agrega la referencia y declara y configura correctamente su objeto de archivo de archivo, el IDE le muestra sugerencias, mientras que con el enlace tardío no lo hará. – Chris
@Chris OTOH, el uso del enlace anticipado significa que sus usuarios también deben tener las referencias agregadas. Eso significa que el enlace tardío es necesario para algunas aplicaciones. –