Una macro que haga un ftp.

11/11/2003 - 22:51 por Choc | Informe spam
Quiero hacer una macro que se traiga un archivo mediante un ftp y lo importe
al abrir el libro, y lo que no se hacer es el ftp desde VB, he llamado un
comando bat, pero el problema es que al llamarlo con Shell, la macro sigue
sin esperar a que el comando acabe.

¿Se puede hacer de otra forma? p.e. haciendo el ftp directamente desde la
macro, sin llamar a un BAT.

Un saludo,
Gracias de nuevo...

Preguntas similare

Leer las respuestas

#1 Fernando Arroyo
12/11/2003 - 09:53 | Informe spam
Una posibilidad es entrar en un bucle y no salir mientras el fichero que te quieres bajar no se encuentre en el disco duro, algo como:

If Dir("C:\FicheroABajar") <> "" Then Kill "C:\FicheroABajar" 'Borrar el fichero, si existe
Shell "Cmd.exe /C Start C:\BatchParaHacerElFTP.bat" 'Esto sería en Windows XP

While Dir("C:\FicheroABajar") = "" 'Mientras no exista el fichero...
Wend

'
'Resto de instrucciones
'


Otra posibilidad es usar una función del API de Windows, aunque en este caso habría que hablar más de una descarga que de un ftp, por lo que quizás no te sirva:

Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Public Function DownloadFile(URL As String, LocalFilename As String) As Boolean
Dim lngRetVal As Long
lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
If lngRetVal = 0 Then DownloadFile = True
End Function

Private Sub DescargarFichero()
DownloadFile "http://www.dominio.com/fichero", "c:\NombreDeFichero"
End Sub


Un saludo.


Fernando Arroyo
MS MVP - Excel



"Choc" escribió en el mensaje news:borqkq$oc1$
Quiero hacer una macro que se traiga un archivo mediante un ftp y lo importe
al abrir el libro, y lo que no se hacer es el ftp desde VB, he llamado un
comando bat, pero el problema es que al llamarlo con Shell, la macro sigue
sin esperar a que el comando acabe.

¿Se puede hacer de otra forma? p.e. haciendo el ftp directamente desde la
macro, sin llamar a un BAT.

Un saludo,
Gracias de nuevo...


Respuesta Responder a este mensaje
#2 Alex V
12/11/2003 - 17:46 | Informe spam
Yo lo que hago además de verificar que exista el archivo,
es que lo pueda abrir de manera exclusiva, para asegurar
que se haya bajado totalmente, ya que cuando son archivos
muy grandes, puede que mientras se esta bajando la
función Dir("C:\FicheroABajar") regrese VERDADERO.
Saludos


Una posibilidad es entrar en un bucle y no salir


mientras el fichero que te quieres bajar no se encuentre
en el disco duro, algo como:

If Dir("C:\FicheroABajar") <> "" Then


Kill "C:\FicheroABajar" 'Borrar el fichero, si existe
Shell "Cmd.exe /C Start


C:\BatchParaHacerElFTP.bat" 'Esto sería en Windows XP

While Dir("C:\FicheroABajar") = "" 'Mientras no


exista el fichero...
Wend

'
'Resto de instrucciones
'


Otra posibilidad es usar una función del API de Windows,


aunque en este caso habría que hablar más de una descarga
que de un ftp, por lo que quizás no te sirva:

Private Declare Function URLDownloadToFile Lib "urlmon"


Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal
szURL As String, ByVal szFileName As String, ByVal
dwReserved As Long, ByVal lpfnCB As Long) As Long

Public Function DownloadFile(URL As String,


LocalFilename As String) As Boolean
Dim lngRetVal As Long
lngRetVal = URLDownloadToFile(0, URL, LocalFilename,


0, 0)
If lngRetVal = 0 Then DownloadFile = True
End Function

Private Sub DescargarFichero()



DownloadFile "http://www.dominio.com/fichero", "c:\NombreD
eFichero"
End Sub


Un saludo.


Fernando Arroyo
MS MVP - Excel



"Choc" escribió en el mensaje


news:borqkq$oc1$
data.net...
Quiero hacer una macro que se traiga un archivo




mediante un ftp y lo importe
al abrir el libro, y lo que no se hacer es el ftp




desde VB, he llamado un
comando bat, pero el problema es que al llamarlo con




Shell, la macro sigue
sin esperar a que el comando acabe.

¿Se puede hacer de otra forma? p.e. haciendo el ftp




directamente desde la
macro, sin llamar a un BAT.

Un saludo,
Gracias de nuevo...




.

Respuesta Responder a este mensaje
#3 Alex V
12/11/2003 - 17:46 | Informe spam
Yo lo que hago además de verificar que exista el archivo,
es que lo pueda abrir de manera exclusiva, para asegurar
que se haya bajado totalmente, ya que cuando son archivos
muy grandes, puede que mientras se esta bajando la
función Dir("C:\FicheroABajar") regrese VERDADERO.
Saludos


Una posibilidad es entrar en un bucle y no salir


mientras el fichero que te quieres bajar no se encuentre
en el disco duro, algo como:

If Dir("C:\FicheroABajar") <> "" Then


Kill "C:\FicheroABajar" 'Borrar el fichero, si existe
Shell "Cmd.exe /C Start


C:\BatchParaHacerElFTP.bat" 'Esto sería en Windows XP

While Dir("C:\FicheroABajar") = "" 'Mientras no


exista el fichero...
Wend

'
'Resto de instrucciones
'


Otra posibilidad es usar una función del API de Windows,


aunque en este caso habría que hablar más de una descarga
que de un ftp, por lo que quizás no te sirva:

Private Declare Function URLDownloadToFile Lib "urlmon"


Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal
szURL As String, ByVal szFileName As String, ByVal
dwReserved As Long, ByVal lpfnCB As Long) As Long

Public Function DownloadFile(URL As String,


LocalFilename As String) As Boolean
Dim lngRetVal As Long
lngRetVal = URLDownloadToFile(0, URL, LocalFilename,


0, 0)
If lngRetVal = 0 Then DownloadFile = True
End Function

Private Sub DescargarFichero()



DownloadFile "http://www.dominio.com/fichero", "c:\NombreD
eFichero"
End Sub


Un saludo.


Fernando Arroyo
MS MVP - Excel



"Choc" escribió en el mensaje


news:borqkq$oc1$
data.net...
Quiero hacer una macro que se traiga un archivo




mediante un ftp y lo importe
al abrir el libro, y lo que no se hacer es el ftp




desde VB, he llamado un
comando bat, pero el problema es que al llamarlo con




Shell, la macro sigue
sin esperar a que el comando acabe.

¿Se puede hacer de otra forma? p.e. haciendo el ftp




directamente desde la
macro, sin llamar a un BAT.

Un saludo,
Gracias de nuevo...




.

Respuesta Responder a este mensaje
#4 Fernando Arroyo
12/11/2003 - 18:56 | Informe spam
Si el fichero a descargar es muy grande, otra cosa que se puede hacer es guardarlo en un directorio temporal mientras está siendo descargado y moverlo al directorio definitivo al terminar la descarga. De este trabajo se puede encargar el batch que ejecuta el ftp.
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Alex V" escribió en el mensaje news:07c101c3a93c$9140a290$
Yo lo que hago además de verificar que exista el archivo,
es que lo pueda abrir de manera exclusiva, para asegurar
que se haya bajado totalmente, ya que cuando son archivos
muy grandes, puede que mientras se esta bajando la
función Dir("C:\FicheroABajar") regrese VERDADERO.
Saludos
Respuesta Responder a este mensaje
#5 Choc
12/11/2003 - 19:31 | Informe spam
Lo de abrirlo de forma exclusiva es buena idea... ¿como lo haces? (el
archivo del que hablo es un archivo de texto)

Lo de que el comando que haga ftp lo haga en un dir. tempotal y al final lo
mueva al dir. de donde se pregunta tambien es muy buena solusion...

Gracias... monstruos...


"Alex V" escribió en el mensaje
news:073b01c3a93c$924d0980$
Yo lo que hago además de verificar que exista el archivo,
es que lo pueda abrir de manera exclusiva, para asegurar
que se haya bajado totalmente, ya que cuando son archivos
muy grandes, puede que mientras se esta bajando la
función Dir("C:\FicheroABajar") regrese VERDADERO.
Saludos


Una posibilidad es entrar en un bucle y no salir


mientras el fichero que te quieres bajar no se encuentre
en el disco duro, algo como:

If Dir("C:\FicheroABajar") <> "" Then


Kill "C:\FicheroABajar" 'Borrar el fichero, si existe
Shell "Cmd.exe /C Start


C:\BatchParaHacerElFTP.bat" 'Esto sería en Windows XP

While Dir("C:\FicheroABajar") = "" 'Mientras no


exista el fichero...
Wend

'
'Resto de instrucciones
'


Otra posibilidad es usar una función del API de Windows,


aunque en este caso habría que hablar más de una descarga
que de un ftp, por lo que quizás no te sirva:

Private Declare Function URLDownloadToFile Lib "urlmon"


Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal
szURL As String, ByVal szFileName As String, ByVal
dwReserved As Long, ByVal lpfnCB As Long) As Long

Public Function DownloadFile(URL As String,


LocalFilename As String) As Boolean
Dim lngRetVal As Long
lngRetVal = URLDownloadToFile(0, URL, LocalFilename,


0, 0)
If lngRetVal = 0 Then DownloadFile = True
End Function

Private Sub DescargarFichero()



DownloadFile "http://www.dominio.com/fichero", "c:\NombreD
eFichero"
End Sub


Un saludo.


Fernando Arroyo
MS MVP - Excel



"Choc" escribió en el mensaje


news:borqkq$oc1$
data.net...
Quiero hacer una macro que se traiga un archivo




mediante un ftp y lo importe
al abrir el libro, y lo que no se hacer es el ftp




desde VB, he llamado un
comando bat, pero el problema es que al llamarlo con




Shell, la macro sigue
sin esperar a que el comando acabe.

¿Se puede hacer de otra forma? p.e. haciendo el ftp




directamente desde la
macro, sin llamar a un BAT.

Un saludo,
Gracias de nuevo...




.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida