preguntar directorio al guardar

03/09/2004 - 16:13 por Jorge M | Informe spam
Buenos días a todos,

estoy haciendo una macro que realice un proceso el cual
ya tengo y quiero que al final guarde el archivo, pero
necesito saber cómo hago para que me pregunte el
directorio en donde deseo guardarlo (pero sólo el
directorio), de tal forma que el nombre del archivo sea
el que yo le de en el código de la macro. (sólo regunte
por el directorio destino)

Gracias por su colaboración
 

Leer las respuestas

#1 Héctor Miguel
04/09/2004 - 08:29 | Informe spam
hola, Jorge !

... macro ... que al final guarde el archivo
... que me pregunte el directorio en donde deseo guardarlo (pero solo el directorio) [...]



te propongo [al final] dos 'metodos'... [ambos en modulos de codigo 'normales']
opcion a):
- usando el dialogo de 'GetOpenFilename'...
[que NO 'abre' el archivo seleccionado pero SI 'toma' la ->ruta completa<-] 'de donde'...
-> 'extraes' [en 'reversa'] la posicion del ultimo caracter '\' <-
'ventajas'...
- [solo son unas...] pocas lineas de codigo :))
'desventajas'...
- TIENES QUE... 'simular' la apertura de un archivo 'cualquiera' :-(
- si se va a usar en excel 97... la funcion 'en reversa' [InStrRev] NO esta 'soportada'
[tendrias que 'proveerla' por ti mismo] ->te incluyo un 'ejemplo' al final-final<- :))
opcion b):
- con algunas 'llamadas' a las API's [y... 'bastantes mas' lineas de codigo] :D

si cualquier duda... ¿comentas?
saludos,
hector.
opcion a --
Sub PruebaDialogos(): Dim Directorio
Directorio = Application.GetOpenFilename("Todos los archivos, *.*", , _
"Selecciona un directorio... ->haciendo doble-click en cualquier archivo<-")
If Directorio <> False Then
Directorio = Left(Directorio, InStrRev(Directorio, "\"))
MsgBox "Se ha seleccionado el directorio:" & vbCr & Directorio
Else: MsgBox "¡ NO se ha seleccionado ningún directorio !!!"
End If
End Sub
'
' la siguiente macro 'de prueba' REQUIERE de las funciones en 'opcion b' :D
Sub PruebaAPIs(): Dim Directorio As String
Directorio = ObtenerDirectorio("Selecciona un directorio...")
If Directorio <> "" Then
MsgBox "Se ha seleccionado el directorio:" & vbCr & Directorio
Else: MsgBox "¡ NO se ha seleccionado ningún directorio !!!"
End If
End Sub
opcion b -- => por si las dudas... EN UN MODULO 'APARTE' ;)
Option Private Module
' las 'llamadas' a las API's '
Declare Function BuscarDirectorio _
Lib "Shell32.dll" _
Alias "SHGetPathFromIDListA" ( _
ByVal IDRuta As Long, _
ByVal TextoRuta As String) As Long
Declare Function ExplorarDirectorios _
Lib "Shell32.dll" _
Alias "SHBrowseForFolderA" ( _
ByRef BrowseInfo As InfoNavegar) As Long
' un tipo de datos definido por el usuario '
Type InfoNavegar
Propietario As Long
IDRutaRaiz As Long
DlgNombre As String
DlgTexto As String
Devolver As Long
NumRuta As Long
Parametro As Long
Imagen As Long
End Type
' la funcion que 'obtiene' el nombre del directorio [si] seleccionado '
Function ObtenerDirectorio(Optional ByVal Texto As String) As String
Dim Iniciar_en As InfoNavegar, _
Ruta As String, _
Directorio As Long, _
Buscar_en As Long, _
Largo As Integer, _
Seleccionado As String
Iniciar_en.IDRutaRaiz = 0&
If IsMissing(Texto) Or Texto = "" _
Then Iniciar_en.DlgTexto = "Selecciona un directorio." _
Else Iniciar_en.DlgTexto = Texto
Iniciar_en.Devolver = &H1
Buscar_en = ExplorarDirectorios(Iniciar_en)
Ruta = Space$(512)
Directorio = BuscarDirectorio(Buscar_en, Ruta)
If Directorio Then
Largo = InStr(Ruta, Chr$(0))
Seleccionado = Left(Ruta, Largo - 1)
If Right(Seleccionado, 1) <> "\" Then Seleccionado = Seleccionado & "\"
Else: Seleccionado = ""
End If
ObtenerDirectorio = Seleccionado
End Function
' funcion 'complementaria' para la opcion a _
la siguiente seria la funcion 'en reversa' SOLO si se usara excel 97
Function InStrRev(ByVal Donde As String, ByVal Que As String) As Long
Dim Pos As Integer: InStrRev = 0: If Len(Que) <> 1 Then Exit Function
For Pos = Len(Donde) To 1 Step -1
If Mid(Donde, Pos, 1) = Que Then
InStrRev = Pos: Exit Function
End If: Next
End Function

Preguntas similares