Option Explicit
Sub ExtraerURLyDescargarLibro()
' Defino las variables de trabajo
Dim WebUrl As String 'Variable para cargar las pagins web
Dim i As Integer 'Variable para concer la fila real en la que se avanza
Dim xx As Integer 'Varialble para contar bucles de 10 elementos y evitar tildes
Dim IE_seteado 'Variable para verificar si se abrio alguna instancia IE
IE_seteado = 0 'Inicio la variable
xx = 0 ' Asigno el valor 0
Dim resp 'Variable para iniciar desde una linea puntual
'Bucle para repetir el proceso 450 veces con paradas cada 10
'Muestro un input para iniciar desde alguna fila especifica
resp = InputBox("Ingrese la fila desde donde quiere iniciar el proceso")
For i = resp To 450 'Defino el bucle
WebUrl = Cells(i, 1).Value 'Tomo el valor de la Columa 1 en la fila i
' Si xx llega a 11 va a la subrutina "mensaje" para detenersee y preguntar si se sigue
' Cuando vuelve del Gosub reinicia xx a 0 para iniciar una nueva tanda de 50 filas
If xx = 50 Then GoSub mensaje: xx = 0
xx = xx + 1 ' Ya sea que reinicio la variable o no, la incrementa en +1
GoSub abreweb 'Va a la Subrutina "abreweb" y luego vuelve
Next 'para reiniciar el bucle en la siguiente fila
GoSub Descargas 'Una vez que copio las URL de descargas inicia la rutina de descargas
GoTo fin 'Termina el proceso, manda abajo de todo
mensaje: 'Subrutina para preguntar si se sigue luego de 10 filas recorridas
'Si al MsgBox le respondemos "SI" vuelve a la rutina principal
If MsgBox("desea Continuar ?", vbYesNo) = vbYes Then Return
'Si paso el IF significa q se eligio NO, por lo tanto, sale del proceso
GoTo fin
abreweb: 'Subrutina para abrir el link, extraer la URL y descargar el libro
'Defino Variables
'Para que funcione debe estar activada la Referencia a Microsoft Internet Controls
Dim Valor_URL ' para tomar el valor de la URL y modificarlo a la URL de descarga
If IE_seteado = 1 Then GoTo salta2 'si ya paso el bucle por aqui, saltara 2 lineas
Dim IE As InternetExplorer 'Reference to Microsoft Internet Controls
Set IE = New InternetExplorer 'Establece que IE sera una nueva instancia de IExplorer
salta2:
With IE ' Acciones a realizar con IE
.Navigate2 WebUrl 'Navegar en el Browser a una ubicacion que puede no estar representada como URL
Do Until IE.ReadyState = READYSTATE_COMPLETE ' Hara un bucle aca mismo hasta completar la pagina
DoEvents
Loop ' Hara un loop
.Visible = False ' No necesitamos ver la pagina, solo extraer los datos
Valor_URL = .LocationURL 'Se carga la Variable con el valor de la URL
' Se modifica el texto de la URL para que quede como la URL de la descarga
'Como se trata de un mismo sitio web, el formato y criterio es similar para todos
'Reemplazo el texto "book" por "content/pdf" y agrego ".pdf" al final
'para modificar hacia el texto de la descarga
Valor_URL = Replace(Valor_URL, "book", "content/pdf") & ".pdf"
Cells(i, 3).Value = Valor_URL 'pego en la Col 3 el valor de la URL de descarga
End With 'finaliza las acciones con IE
IE_seteado = 1 'asigna 1 a la Variable para que no la setee otra vez
Return 'vuelve a la rutina principal para pasar a las siguientes filas
GoTo fin
Descargas: 'Inicia la rutina de descarga de PDF
' Primero advierto al usuario sobre configurar Chrome para que no abra el PDF en el Navegador
' Disparo en Chrome porque no se usar el otro
'Defino Variables
Dim ms1 'primera parte del mensaje
Dim ms2 ' segunda parte del mensaje
Dim ms3 ' tercera parte del mensaje
Dim ms4 ' cuarta parte del mensaje
Dim Titulo
Dim CHROMEOK ' para verificar que el aviso se lanze solo una vez
CHROMEOK = 0
'ingreso los valores a las variables que formaran la advertencia
ms1 = "Para poder descargar los PDF debe deshabilitar" & Chr(10) & "la apertura de PDF desde el navegador" & Chr(10)
ms2 = "Vaya a la Configuracion de Chrome (los tres puntitos en el navegador)" & Chr(10)
ms3 = "Luego a Privacidad // Sitios WEB // PDF.. y " & Chr(10) & "Desactive la casilla para no visualizar PDF en en Browser" & Chr(10)
ms4 = "Desea Seguir ?? "
Titulo = " AVISO IMPORTANTE"
'Primero verifica si el aviso ya fue ejecutado, si ya lo hizo lo saltea
If CHROMEOK >= 1 Then GoTo iniciar
'Si el if anterior falla muestra el mensaje y cambia el valor de chromeok a 1 para q no se muestre mas
If MsgBox(ms1 & Chr(10) & ms2 & Chr(10) & ms3 & Chr(10) & Chr(10) & ms4, vbYesNo, Titulo) = vbYes Then CHROMEOK = 1
iniciar:
' Defino las variables de trabajo
Dim Web_Descarga As String 'Variable para cargar las pagins web de descarga
Dim fila As Integer 'Variable para concer la fila real en la que se avanza
Dim cont As Integer 'Varialble para contar bucles de 10 elementos y evitar tildes
cont = 0 ' Asigno el valor 0
'Bucle para repetir el proceso 450 veces con paradas cada 10
For fila = 1 To 450 'Defino el bucle
Web_Descarga = Cells(fila, 3).Value 'Tomo el valor de la Columa 3 en la fila "fila"
' Si cont llega a 11 va a la subrutina "mensaje" para detenersee y preguntar si se sigue
' Cuando vuelve del Gosub reinicia cont a 0 para iniciar una nueva tanda de 50 filas
If cont = 50 Then GoSub mensaje: cont = 0
cont = cont + 1 ' Ya sea que reinicio la variable o no, la incrementa en +1
'abre la pagina que contiene la descarga directa
Shell ("C:\Program Files\Google\Chrome\Application\chrome.exe -url " & Web_Descarga)
Next 'para reiniciar el bucle en la siguiente fila
fin: 'Rutina de Salida
IE.Quit 'Cierra la instancia IE
End Sub