Visual Basic - URL de seguimiento??

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 21
Ha aumentado su posición en 2 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

URL de seguimiento??

Publicado por Blas (15 intervenciones) el 30/04/2020 04:41:28
Hola creo que se llama URL de seguimiento.
Lo cierto es que en un libro Excel tengo la instruccion para abrir en Chrome
1
2
3
4
5
6
Dim WebUrl As String
Dim Link
Link=range ("A1").value   ' el valor de A1 es : link.springer.com/openurl?genre=book&isbn=978-0-306-48048-5
 
        WebUrl = "http://" & Link & """"
     Shell ("C:\Program Files\Google\Chrome\Application\chrome.exe -url " & WebUrl)

VBA me abre Chrome siguiendo el link. pero mientras carga la pagina aparece la URL crrepondiente

https://link.springer.com/book/10.1007%2Fb100747

Como puedo hacer que vba Tome el valor de la barra de direccion y lo pegue en B1 ??

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

URL de seguimiento??

Publicado por Andres Leonardo (1798 intervenciones) el 30/04/2020 16:55:19
No se... si esto puedas con un shell .. por qeu es como qeu desde VB Lanzaste el navegador en este caso.. y listo alla el vera que hace ... no se si puedas controlarlo .. el shell es como un lanzador ... no controlas esto-- ojo esto en mi experiencia muchos sabran mis amigos mas expdertos quizas haya algo que se peude hacer desde shell...

Que podria y de hecho yo he probado He creado con Internet Explorer ya que desde VBA los puedes controlar a este objeto IE y puedes obterener sus propiedades y manejar... ... te paso un ejemplo del codigo

Saludos


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
'En excel en referencias debes activar "Internet Controls " dejo una imagen como se hace
Sub Macro1()
'
' Macro1 Macro
'
' Acceso directo: CTRL+q
'
    IEGetToKnow
End Sub
 
Sub IEGetToKnow()
    Dim IE As InternetExplorer 'Reference to Microsoft Internet Controls
    Set IE = New InternetExplorer
 
    With IE
        'Navigation
        .Navigate2 "https://link.springer.com/openurl?genre=book&isbn=978-0-306-48048-5" 'Navigates the browser to a location that might not be expressed as a URL, such as a PIDL for an entity in the Windows Shell namespace.
        Do Until IE.ReadyState = READYSTATE_COMPLETE
           DoEvents
        Loop
        .Visible = True 'Sets or gets a value that indicates whether the object is visible or hidden.
            'MsgBox .LocationURL
            Range("B2").Value = .LocationURL
    End With
    IE.Quit 'close the application window
End Sub


ie
ie2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 21
Ha aumentado su posición en 2 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

URL de seguimiento??

Publicado por Blas (15 intervenciones) el 30/04/2020 17:35:59
Andres, muchas gracias por ayudarme en el proyecto. La macro que me pasaste responde muy bien a lo que preciso en cuanto a tomar el dato y ponerlo en C1,

Me parece muy bien tu idea de pasarme a IE ya que es mas simple el manejo por ser un complemento compatible de Microsoft.
La linea que propones abre mi link en un navegador:

1
.Navigate2 "https://link.springer.com/openurl?genre=book&isbn=978-0-306-48048-5"

Tal como lo mostras, se abre la ventana siguiendo el enlace pero al cargarse la pagina la URL cambia a una direccion con el formato de pagina web.

El vinculo es "https://link.springer.com/openurl?genre=book&isbn=978-0-306-48048-5"
yo necesito que C1 tome el valor https://link.springer.com/book/10.1007%2Fb100747

alguna idea??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

URL de seguimiento??

Publicado por Andres Leonardo (1798 intervenciones) el 30/04/2020 19:06:39
Pero si ese valor lo pega en la celda ... o yo estoy viendo mal???
En la imagen te puse el contenido de la celda y es el qeu qiuieres .. lo unico fue que lo puse en B2

puedes confirmar qeu este errado0-'??_?




ie
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 21
Ha aumentado su posición en 2 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

URL de seguimiento??

Publicado por Blas (15 intervenciones) el 01/05/2020 18:58:14
Hola Andres, realmente tu codigo funciono muy bien.
Pense q no funciono porque yo miraba otras celdas que modificaban el valor pero no habia notado q el dato lo pego en B2.
Mientras miraba soluciones encontre una forma tambien de abrir el link y enviarle un .send y capturar el .response en una variable y luego separe el texto de la url .
Pero al ver q tu codigo funciona lo adapte y lo use para descargarme 410 libros en PDF de una pagina de publicaciones tecnicas

Quiero agradecerte el empeño y el trabajo invertido y compartir el codigo , el cual no esta del todo finalizado pero que cada uno podra adaptar a sus necesidades.

Funciones:

En un libro Excel habilitado para macros se encuentra la lista de 400 links a una pagina web que ofrece la descarga gratuita de libros en PDF
Los links se colocaron en cada fila de la columna A
El proceso en VBA debe recorrer la lista, abrir el link y capturar la URL del sitio en una variable
Esa variable sera modificada segun el criterio de ese sitio web para transformar la URL en la URL de descarga.
El valor de la URL de descarga se pega en la columna B
El proceso hara pausas cada x filas para evitar que la memoria colapse
Una vez que las URL fueron pegadas inicia otra rutina para abrir cada URL y descargar los libros.

Adaptabilidad:

Puede usarse en sitios de descarga a partir de una lista de PDF. Extraje la lista de links de un PDF con una aplicacion
Puede modificarse las tandas de filas que leera antes de cada pausa para evitar problemas de memoria
Para continuar el proceso despues del cuelgue, agruegue un inputbox para indicarle al proceso desde cual fila empezar

Contras:

Como abre un objeto OLE de IExplorer no pude manejar la liberacion de la memoria por lo que tuve varios cuelgues
Una vez realizado el proceso la columna B ya tendra los datos por lo que al reiniciarlo realizara el trabajo otra vez

Mejoras:

Puede mejorar el codigo para que, en lugar de hacer un bucle de 450 filas que lo haga con las filas que tengan datos para evitar que se abran paginas vacias ya que las ultimas filas hacen referencia a una URL=""
Puede mejorarse el Mensaje de pausa para que, dependiendo que rutina lo llame indique distinta informacion
Puede agregarse un inputbox para indicar cada cuanto quiere hacer la pausa

Espero que les sea de utilidad y puedan usarlo para sus necesidades.

Fue diseñado por Blas
Colaboradores: Andres y Xavi

El codigo lo pegue en un modulo para llamar a la macro desde un boton en la hoja de excel.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar