Hola! a todos
No pretendo, AGmzT, enseñarte -en una respuesta- el lenguaje HTML. Pero si te puedo dar una idea de lo que está pasando. Veamos:
- Abre el Notepad tras lo cual copia y pega lo siguiente:
Código HTML:
Ver original
<input type="text" name="txtInput_1" value="Primera caja de texto"> <input type="text" name="txtInput_2" value="Segunda caja de texto"> <input type="text" name="txtInput_3" value="Tercera caja de texto" id="ct01">
- Guarda este archivo de texto con el siguiente nombre:
Htm de prueba.htm
- Vamos al Excel... Crea un nuevo libro e incorpórale a un módulo común la siguiente macro:
Código vb:
Ver originalSub Macro1()
Dim ie, mObj, iElem
Cells.Clear: Range("a1:c1") = Array("Por Id:", , "Por Name:")
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate ThisWorkbook.Path & "\Htm de prueba.htm"
'Búsqueda por Id:
Set mObj = ie.Document.getelementbyid("ct01")
Range("a2") = mObj.Value
'Búsqueda por Tag:
Set mObj = ie.Document.getElementsByTagName("input")
For Each iElem In mObj
Cells(Rows.Count, "c").End(xlUp).Offset(1) = iElem.Value
Next
End Sub
- Guarda este libro Excel EN LA MISMA CARPETA donde guardaste el archivo de texto anterior con cualquier nombre.
- ¿Qué hace esta macro?...
a) Crea una instancia de IE
b) Navega hacia la página representada por el archivo
Htm de prueba.htm.
c) Y utiliza las dos variantes sobre las que quiero hacerte notar la diferencia.
___________________________
- Cuando la macro hace:
Set mObj = ie.Document.getelementbyid("ct01")
es porque EN TODA LA PÁGINA Web existe un ÚNICO elemento identificado por el nombre "ct01".
Este hecho -en la página- lo ves aquí:
<input type="text" name="txtInput" value="Tercera caja de texto" id="ct01">
(¿ves que al final dice: id="ct01"?)
¿Nos vamos entendiendo?...
___________________________
- Ahora bien: las otras dos cajas de texto no están identificadas. Nos preguntamos: ¿Cómo acceder a ellas?...
- Lo hacemos utilizando una variante del "get" anterior que es:
Set mObj = ie.Document.getElementsByTagName("input")
Los detalles a tener en cuenta son:
- La "s" en getElement
sByTagName te indica que no obtendremos "un único elemento" sino TODOS los elementos identificados por el tag "input" (para el ejemplo).
- Así el objeto "mObj" de la macro se transforma en una colección de "input" a la que accedemos -una a una- mediante: For Each - Next.
-
Entonces: ¿Cómo identificas de entre todos los elementos "input" el que estás intentando localizar?...
. A veces por el "className": iElem.className
. Otras veces por el "Name": iElem.Name (aparentemente éste sería tu caso).
___________________________
- Para terminar, entonces: tu macro debe recorrer -en estos casos- TODO el conjunto de "input" hasta hallar aquél cuyo "Name" estás tratando de localizar.
- Y una vez localizado: ¿Qué haces?... Bueno:
En lugar del "tranquilo y cómodo":
IE.Document.getelementbyid("gbqfq").Value = "1234"
harás:
iElem.Value = "1234"
___________________________
¿Entendido?...
Saludos, Cacho R.