ayuda multidescargas

20/07/2007 - 21:36 por daniel | Informe spam
Hola a todos
haber si me podeis ayudar con lo siguiente:
tengo una hoja excel en la columna A tengo la lista con las direcciones de
la descarga de los archivos
y en la columna B la ruta donde se deben guardar el archivo descargado.
y necesito que en un listbox1 me muestre la lista de archivos y en el
listbox con la opcion multiselect poder descargar los archivos seleccionados
y en el label1 me muestre los archivos que van descargados ejemplo 1/10.
uso la siguiente macro para descargar uno:
'-

Option Explicit

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 DownloadFromUrl(strFullUrl As String, _
strSaveFile As String) As Boolean


Dim RetVal As Long

RetVal = URLDownloadToFile(0, "ruta del archivo", _
"c:\Documents and Settings\DANIEL\Escritorio\Yahoo.htm", 0, 0)

If RetVal = 0 Then
DownloadFromUrl = True
End If

End Function

Sub Prueba()


Dim x As String

If DownloadFromUrl("ruta del archivo", x) Then
MsgBox "Ok ...Descarga exitosa"
Else
MsgBox "Imposible :-( ..., intentolo en otro momento :-P "
End If
End Sub

un saludo y muchas gracias
Daniel

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
21/07/2007 - 06:48 | Informe spam
hola, daniel !

tengo una hoja excel en la columna A tengo la lista con las direcciones de la descarga de los archivos
y en la columna B la ruta donde se deben guardar el archivo descargado.
y necesito que en un listbox1 me muestre la lista de archivos
y en el listbox con la opcion multiselect poder descargar los archivos seleccionados
y en el label1 me muestre los archivos que van descargados ejemplo 1/10.
uso la siguiente macro para descargar uno:



1) con el siguiente ejemplo, necesitaras solo la declaracion de la API: -> Private Declare Function URLDownloadToFile

2) como no indicas [+/- exactamente] 'como' le pasas al listbox el contenido de las columnas A y B -?-
-> estoy suponiendo que lo haces por medio de la propiedad: -> RowSource -???-
[tambien *asumo/supongo/propongo/...* que no sea necesario un MsgBox para avisar si hubo exito o no con la descarga] -???-

3) copia las siguientes lineas en el modulo de codigo del formulario [DESPUES de la declaracion de la API]

Dim Total As Byte, Seleccionados As Byte, Procesar() As Boolean, _
Sig As Byte, Procesando As Byte
Private Sub UserForm_Initialize()
Total = ListBox1.ListCount
ReDim Procesar(Total)
End Sub
Private Sub ListBox1_Change()
With ListBox1
Seleccionados = Seleccionados + IIf(.Selected(.ListIndex), 1, -1)
Procesar(.ListIndex) = .Selected(.ListIndex)
End With
End Sub
Private Sub CommandButton1_Click()
With ListBox1
For Sig = LBound(Procesar) To UBound(Procesar)
If Procesar(Sig) Then
Procesando = Procesando + 1
Label1.Caption = Procesando & " / " & Seleccionados
URLDownloadToFile 0, .List(Sig, 0), .List(Sig, 1), 0, 0
End If
Next
End With
End Sub

corrige donde mis supuestos esten equivocados, haz algunas pruebas y...
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ el codigo expuesto __
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 DownloadFromUrl(strFullUrl As String, _
strSaveFile As String) As Boolean
Dim RetVal As Long
RetVal = URLDownloadToFile(0, "ruta del archivo", _
"c:\Documents and Settings\DANIEL\Escritorio\Yahoo.htm", 0, 0)
If RetVal = 0 Then
DownloadFromUrl = True
End If
End Function

Sub Prueba()
Dim x As String
If DownloadFromUrl("ruta del archivo", x) Then
MsgBox "Ok ...Descarga exitosa"
Else
MsgBox "Imposible :-( ..., intentolo en otro momento :-P "
End If
End Sub
Respuesta Responder a este mensaje
#2 daniel
22/07/2007 - 22:15 | Informe spam
Hola Hector Miguel
Muchas gracias por responder
si utilizo el RowSource para traer los datos al listbox.
la macro que me pasate no me guarda los archivos descargados en la carpeta
que yo ponga en la columna B
si que me pone los datos en el listbox1 y al seleccionarlos y dar en
comandbutton pone en el label1 ejem 2/2
pero cuando miro en la carpeta no se encuentran los archivos,
esta es la macro creo que si que la e puesto bien

Option Explicit

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

Dim Total As Byte, Seleccionados As Byte, Procesar() As Boolean, _
Sig As Byte, Procesando As Byte


Private Sub UserForm_activate()

Total = ListBox1.ListCount
ReDim Procesar(Total)
End Sub
Private Sub ListBox1_Change()
With ListBox1
Seleccionados = Seleccionados + IIf(.Selected(.ListIndex), 1, -1)
Procesar(.ListIndex) = .Selected(.ListIndex)
End With
End Sub
Private Sub CommandButton1_Click()
With ListBox1
For Sig = LBound(Procesar) To UBound(Procesar)
If Procesar(Sig) Then
Procesando = Procesando + 1
Label1.Caption = Procesando & " / " & Seleccionados
URLDownloadToFile 0, .List(Sig, 0), .List(Sig, 1), 0, 0
End If
Next
End With
End Sub

-
un saludo y muchas gracias por tu ayuda
Daniel

"Héctor Miguel" escribió en el mensaje
news:
hola, daniel !

tengo una hoja excel en la columna A tengo la lista con las direcciones
de la descarga de los archivos
y en la columna B la ruta donde se deben guardar el archivo descargado.
y necesito que en un listbox1 me muestre la lista de archivos
y en el listbox con la opcion multiselect poder descargar los archivos
seleccionados
y en el label1 me muestre los archivos que van descargados ejemplo 1/10.
uso la siguiente macro para descargar uno:



1) con el siguiente ejemplo, necesitaras solo la declaracion de la API: ->
Private Declare Function URLDownloadToFile

2) como no indicas [+/- exactamente] 'como' le pasas al listbox el
contenido de las columnas A y B -?-
-> estoy suponiendo que lo haces por medio de la propiedad: ->
RowSource -???-
[tambien *asumo/supongo/propongo/...* que no sea necesario un MsgBox
para avisar si hubo exito o no con la descarga] -???-

3) copia las siguientes lineas en el modulo de codigo del formulario
[DESPUES de la declaracion de la API]

Dim Total As Byte, Seleccionados As Byte, Procesar() As Boolean, _
Sig As Byte, Procesando As Byte
Private Sub UserForm_Initialize()
Total = ListBox1.ListCount
ReDim Procesar(Total)
End Sub
Private Sub ListBox1_Change()
With ListBox1
Seleccionados = Seleccionados + IIf(.Selected(.ListIndex), 1, -1)
Procesar(.ListIndex) = .Selected(.ListIndex)
End With
End Sub
Private Sub CommandButton1_Click()
With ListBox1
For Sig = LBound(Procesar) To UBound(Procesar)
If Procesar(Sig) Then
Procesando = Procesando + 1
Label1.Caption = Procesando & " / " & Seleccionados
URLDownloadToFile 0, .List(Sig, 0), .List(Sig, 1), 0, 0
End If
Next
End With
End Sub

corrige donde mis supuestos esten equivocados, haz algunas pruebas y...
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ el codigo expuesto __
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 DownloadFromUrl(strFullUrl As String, _
strSaveFile As String) As Boolean
Dim RetVal As Long
RetVal = URLDownloadToFile(0, "ruta del archivo", _
"c:\Documents and Settings\DANIEL\Escritorio\Yahoo.htm", 0, 0)
If RetVal = 0 Then
DownloadFromUrl = True
End If
End Function

Sub Prueba()
Dim x As String
If DownloadFromUrl("ruta del archivo", x) Then
MsgBox "Ok ...Descarga exitosa"
Else
MsgBox "Imposible :-( ..., intentolo en otro momento :-P "
End If
End Sub




Respuesta Responder a este mensaje
#3 Héctor Miguel
23/07/2007 - 00:19 | Informe spam
hola, daniel !

... si utilizo el RowSource para traer los datos al listbox.
la macro que me pasate no me guarda los archivos descargados en la carpeta que yo ponga en la columna B
si que me pone los datos en el listbox1 y al seleccionarlos y dar en comandbutton pone en el label1 ejem 2/2
pero cuando miro en la carpeta no se encuentran los archivos [...]



de acuerdo con tu mensaje inicial, concretamente las dos primeras *indicaciones*:
"> tengo una hoja excel en la columna A tengo la lista con las direcciones de la descarga de los archivos"
"> y en la columna B la ruta donde se deben guardar el archivo descargado."

1) es muy probable que en la columna 'B' especifiques SOLAMENTE *la ruta* [ya que los ejemplos son *cripticos*] -?-

2) lo que se requiere, es que *la ruta* INCLUYA el nombre y la EXTension tal-co[mo] quieres que sea guardada CADA descarga
[p.e.] lo siguiente es lo que yo puse como ejemplo antes de postear la propuesta:
[A2:A6]
'http://www.contextures.com/extractunique.zip
'http://www.contextures.com/datavalinputmsgalt.zip
'http://www.contextures.com/dinnerplanner.zip
'http://www.cpearson.com/zips/shellandwait.zip
'http://www.cpearson.com/zips/subcla...scroll.zip
[B2:B6]
c:\documents and settings\hmod\mis documentos\debra file 01.zip
c:\documents and settings\hmod\mis documentos\debra file 02.zip
c:\documents and settings\hmod\mis documentos\debra file 03.zip
c:\documents and settings\hmod\mis documentos\chip file 01.zip
c:\documents and settings\hmod\mis documentos\chip file 02.zip

=> *que* es lo que pones tu en la columna B [es un detalle que NO has expuesto] -???-

comentas [si hubiera] algun detalle *en el tintero* ?
saludos,
hector.

__ el codigo expuesto __
esta es la macro creo que si que la e puesto bien
Option Explicit
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

Dim Total As Byte, Seleccionados As Byte, Procesar() As Boolean, _
Sig As Byte, Procesando As Byte
Private Sub UserForm_activate()
Total = ListBox1.ListCount
ReDim Procesar(Total)
End Sub
Private Sub ListBox1_Change()
With ListBox1
Seleccionados = Seleccionados + IIf(.Selected(.ListIndex), 1, -1)
Procesar(.ListIndex) = .Selected(.ListIndex)
End With
End Sub
Private Sub CommandButton1_Click()
With ListBox1
For Sig = LBound(Procesar) To UBound(Procesar)
If Procesar(Sig) Then
Procesando = Procesando + 1
Label1.Caption = Procesando & " / " & Seleccionados
URLDownloadToFile 0, .List(Sig, 0), .List(Sig, 1), 0, 0
End If
Next
End With
End Sub



__ mensajes previos __
tengo una hoja excel en la columna A tengo la lista con las direcciones de la descarga de los archivos
y en la columna B la ruta donde se deben guardar el archivo descargado.
y necesito que en un listbox1 me muestre la lista de archivos
y en el listbox con la opcion multiselect poder descargar los archivos seleccionados
y en el label1 me muestre los archivos que van descargados ejemplo 1/10.
uso la siguiente macro para descargar uno:



1) con el siguiente ejemplo, necesitaras solo la declaracion de la API: -> Private Declare Function URLDownloadToFile

2) como no indicas [+/- exactamente] 'como' le pasas al listbox el contenido de las columnas A y B -?-
-> estoy suponiendo que lo haces por medio de la propiedad: -> RowSource -???-
[tambien *asumo/supongo/propongo/...* que no sea necesario un MsgBox para avisar si hubo exito o no con la descarga] -???-

3) copia las siguientes lineas en el modulo de codigo del formulario [DESPUES de la declaracion de la API]

Dim Total As Byte, Seleccionados As Byte, Procesar() As Boolean, _
Sig As Byte, Procesando As Byte
Private Sub UserForm_Initialize()
Total = ListBox1.ListCount
ReDim Procesar(Total)
End Sub
Private Sub ListBox1_Change()
With ListBox1
Seleccionados = Seleccionados + IIf(.Selected(.ListIndex), 1, -1)
Procesar(.ListIndex) = .Selected(.ListIndex)
End With
End Sub
Private Sub CommandButton1_Click()
With ListBox1
For Sig = LBound(Procesar) To UBound(Procesar)
If Procesar(Sig) Then
Procesando = Procesando + 1
Label1.Caption = Procesando & " / " & Seleccionados
URLDownloadToFile 0, .List(Sig, 0), .List(Sig, 1), 0, 0
End If
Next
End With
End Sub

corrige donde mis supuestos esten equivocados, haz algunas pruebas y...
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 daniel
23/07/2007 - 19:38 | Informe spam
Hola Hector Miguel
muchisimas garcias ya funciona perfectamente
donde habria que cambiar el codigo para que hiciese lo siguiente
1 que aparezca un mensaje al terminar de descargar todos los archivos
seleccionados
2 que muestre un mensaje si a habido algun fallo en la descarga
3 que en el label3 muestre el archivo que se esta descargando en ese
momento.
4 en un checkbox poner si esta marcado que internet se desconecte al
terminar las descargas
5 si al abrir el userform internet no esta conectado que muestre la ventana
de conectar




un saludo y muchas gracias
Daniel


"Héctor Miguel" escribió en el mensaje
news:
hola, daniel !

... si utilizo el RowSource para traer los datos al listbox.
la macro que me pasate no me guarda los archivos descargados en la
carpeta que yo ponga en la columna B
si que me pone los datos en el listbox1 y al seleccionarlos y dar en
comandbutton pone en el label1 ejem 2/2
pero cuando miro en la carpeta no se encuentran los archivos [...]



de acuerdo con tu mensaje inicial, concretamente las dos primeras
*indicaciones*:
"> tengo una hoja excel en la columna A tengo la lista con las direcciones
de la descarga de los archivos"
"> y en la columna B la ruta donde se deben guardar el archivo
descargado."

1) es muy probable que en la columna 'B' especifiques SOLAMENTE *la ruta*
[ya que los ejemplos son *cripticos*] -?-

2) lo que se requiere, es que *la ruta* INCLUYA el nombre y la EXTension
tal-co[mo] quieres que sea guardada CADA descarga
[p.e.] lo siguiente es lo que yo puse como ejemplo antes de postear la
propuesta:
[A2:A6]
'http://www.contextures.com/extractunique.zip
'http://www.contextures.com/datavalinputmsgalt.zip
'http://www.contextures.com/dinnerplanner.zip
'http://www.cpearson.com/zips/shellandwait.zip
'http://www.cpearson.com/zips/subcla...scroll.zip
[B2:B6]
c:\documents and settings\hmod\mis documentos\debra file 01.zip
c:\documents and settings\hmod\mis documentos\debra file 02.zip
c:\documents and settings\hmod\mis documentos\debra file 03.zip
c:\documents and settings\hmod\mis documentos\chip file 01.zip
c:\documents and settings\hmod\mis documentos\chip file 02.zip

=> *que* es lo que pones tu en la columna B [es un detalle que NO has
expuesto] -???-

comentas [si hubiera] algun detalle *en el tintero* ?
saludos,
hector.

__ el codigo expuesto __
esta es la macro creo que si que la e puesto bien
Option Explicit
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

Dim Total As Byte, Seleccionados As Byte, Procesar() As Boolean, _
Sig As Byte, Procesando As Byte
Private Sub UserForm_activate()
Total = ListBox1.ListCount
ReDim Procesar(Total)
End Sub
Private Sub ListBox1_Change()
With ListBox1
Seleccionados = Seleccionados + IIf(.Selected(.ListIndex), 1, -1)
Procesar(.ListIndex) = .Selected(.ListIndex)
End With
End Sub
Private Sub CommandButton1_Click()
With ListBox1
For Sig = LBound(Procesar) To UBound(Procesar)
If Procesar(Sig) Then
Procesando = Procesando + 1
Label1.Caption = Procesando & " / " & Seleccionados
URLDownloadToFile 0, .List(Sig, 0), .List(Sig, 1), 0, 0
End If
Next
End With
End Sub



__ mensajes previos __
tengo una hoja excel en la columna A tengo la lista con las direcciones
de la descarga de los archivos
y en la columna B la ruta donde se deben guardar el archivo descargado.
y necesito que en un listbox1 me muestre la lista de archivos
y en el listbox con la opcion multiselect poder descargar los archivos
seleccionados
y en el label1 me muestre los archivos que van descargados ejemplo
1/10.
uso la siguiente macro para descargar uno:



1) con el siguiente ejemplo, necesitaras solo la declaracion de la
API: -> Private Declare Function URLDownloadToFile

2) como no indicas [+/- exactamente] 'como' le pasas al listbox el
contenido de las columnas A y B -?-
-> estoy suponiendo que lo haces por medio de la propiedad: ->
RowSource -???-
[tambien *asumo/supongo/propongo/...* que no sea necesario un MsgBox
para avisar si hubo exito o no con la descarga] -???-

3) copia las siguientes lineas en el modulo de codigo del formulario
[DESPUES de la declaracion de la API]

Dim Total As Byte, Seleccionados As Byte, Procesar() As Boolean, _
Sig As Byte, Procesando As Byte
Private Sub UserForm_Initialize()
Total = ListBox1.ListCount
ReDim Procesar(Total)
End Sub
Private Sub ListBox1_Change()
With ListBox1
Seleccionados = Seleccionados + IIf(.Selected(.ListIndex), 1, -1)
Procesar(.ListIndex) = .Selected(.ListIndex)
End With
End Sub
Private Sub CommandButton1_Click()
With ListBox1
For Sig = LBound(Procesar) To UBound(Procesar)
If Procesar(Sig) Then
Procesando = Procesando + 1
Label1.Caption = Procesando & " / " & Seleccionados
URLDownloadToFile 0, .List(Sig, 0), .List(Sig, 1), 0, 0
End If
Next
End With
End Sub

corrige donde mis supuestos esten equivocados, haz algunas pruebas y...
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.






Respuesta Responder a este mensaje
#5 Héctor Miguel
24/07/2007 - 00:12 | Informe spam
hola, daniel !

donde habria que cambiar el codigo para que hiciese lo siguiente
1 que aparezca un mensaje al terminar de descargar todos los archivos seleccionados
2 que muestre un mensaje si a habido algun fallo en la descarga
3 que en el label3 muestre el archivo que se esta descargando en ese momento.
4 en un checkbox poner si esta marcado que internet se desconecte al terminar las descargas
5 si al abrir el userform internet no esta conectado que muestre la ventana de conectar



1, 2 y 3) [una alternativa]:
-> una vez terminado el proceso de las descargas, comprobar por un nuevo bucle si todos los archivos *existen*
modifica el codigo en el commandbutton +/- a lo siguiente:

Private Sub CommandButton1_Click()
Dim Msj As String
With ListBox1
For Sig = LBound(Procesar) To UBound(Procesar)
If Procesar(Sig) Then
Procesando = Procesando + 1
Label1.Caption = Procesando & " / " & Seleccionados
Label3.Caption = "Procesando: " & .List(Sig, 0)
Me.Repaint
URLDownloadToFile 0, .List(Sig, 0), .List(Sig, 1), 0, 0
End If:
Next
For Sig = LBound(Procesar) To UBound(Procesar)
If Procesar(Sig) Then If Dir(.List(Sig, 1)) = "" Then Msj = vbCr & Msj & .List(Sig, 0)
Next
End With
If Msj <> "" Then Msj = vbCr & "Los siguientes archivos NO se descargaron:" & Msj
MsgBox "Proceso terminado." & Msj
End Sub

4 y 5) considerando que existen varias alternativas de conexion a internet -?-
-> revisa/adapta/comenta/... ejemplos desde la pagina de Randy Birch
Visual Basic Network Services
InternetGetConnectedState: Determine Network Connection Type
http://vbnet.mvps.org/code/network/...dstate.htm

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida