• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Excel webdeki verinin belirli kısmını çekme

@Haluk reis müsaadenle;

@bsen sorunuza göre basit kod aşağıdaki gibidir.

C#:
Sub Web_XmlHttp()
'Not: Excel > VBA > References > Tools > MicrosoftHTML Object Library işaretlemeniz gerekmektedir.
Dim htmldoc As HTMLDocument
Set xmlHTTPReq = CreateObject("MSXML2.XMLHTTP")
Set htmldoc = CreateObject("htmlFile")
    postURL = "http://www.hurriyet.com.tr/ekonomi/"
    With xmlHTTPReq
        .Open "GET", postURL, False
        .Send
    End With
htmldoc.body.innerHTML = xmlHTTPReq.responseText
MsgBox htmldoc.getElementsByClassName("parite-value")(4).innerText
End Sub
 
@Haluk reis müsaadenle;

@bsen sorunuza göre basit kod aşağıdaki gibidir.

C#:
Sub Web_XmlHttp()
'Not: Excel > VBA > References > Tools > MicrosoftHTML Object Library işaretlemeniz gerekmektedir.
Dim htmldoc As HTMLDocument
Set xmlHTTPReq = CreateObject("MSXML2.XMLHTTP")
Set htmldoc = CreateObject("htmlFile")
    postURL = "http://www.hurriyet.com.tr/ekonomi/"
    With xmlHTTPReq
        .Open "GET", postURL, False
        .Send
    End With
htmldoc.body.innerHTML = xmlHTTPReq.responseText
MsgBox htmldoc.getElementsByClassName("parite-value")(4).innerText
End Sub

Bu kodun vereceği rakamı bir hücreye mesela A1'e yazdırmak istiyorum. Onu nasıl yapabilirim?
 
MsgBox htmldoc.getElementsByClassName("parite-value")(4).innerText bu kodun başındaki "MsgBox" yerine "Range("A1") =" yazmanız yeterlidir.
 
@metehan8001 ;

Ufak bir hatırlatma yapmak istedim....

Aşağıdaki satırda htmldoc değişkenini "Early Binding" sırasında HTMLDocument olarak tanımladın,

Kod:
Dim htmldoc As HTMLDocument


O zaman, "Run Time" sırasında aşağıdaki gibi tekrar "Late Binding" nesneyi yeniden oluşturarak atamana gerek yok.

Kod:
Set htmldoc = CreateObject("htmlFile")


Bunun yerine direkt olarak;

Kod:
Set htmldoc = New HTMLDocument


kullanabilirsin, böylece kodun baş tarafıyla uyumlu olsun.

.
 
@metehan8001 ;

Ufak bir hatırlatma yapmak istedim....

Aşağıdaki satırda htmldoc değişkenini "Early Binding" sırasında HTMLDocument olarak tanımladın,

Kod:
Dim htmldoc As HTMLDocument


O zaman, "Run Time" sırasında aşağıdaki gibi tekrar "Late Binding" tanımlayarak atamana gerek yok.

Kod:
Set htmldoc = CreateObject("htmlFile")


Bunun yerine direkt olarak;

Kod:
Set htmldoc = New HTMLDocument


kullanabilirsin, böylece kodun baş tarafıyla uyumlu olsun.

.

@Haluk Reis vermiş olduğun bilgi için teşekkür ederim. Bu konuda ufak bir sorum olacak.
Set htmldoc = CreateObject("htmlFile") htmldoc (Late Binding) sadece bu kodu kullanmak istediğimde ClassName elemendlerinde hata veriyor ama "Early Binding" yaptığımda hata vermiyor.
Sanki başka bir eksiğim daha var, bu eksik bilgiyi sizin engin bilginizden yararlanarak öğrenebilir miyim ?
 
Estağfurullah ....

Sorun sadece nesnenin Late Binding olarak oluşturulmasından kaynaklanıyor. Oluşturulan HTMLfile nesnesinin içeriğindeki bazı nesneler, kodun çalıştırılması sırasında nesnenin Early veya Late Binding durumuna göre "expose" olmuyor. Yani, dokümanın içersinde oluşturulmuyor..... belli bir nedeni olduğunu da herhangibir kaynakta görmedim. Bu durum, MSXML2.XMLHTTP nesnesinin Early veya Late Binding oluşturulmasında da bazen karşımıza çıkabiliyor.

Sıkıntı bundan ibaret.... bunu da deneyerek bulmak gerekiyor.

Ayrıca, işi bittikten sonra htmldoc nesnesini kapatıp, oluşturulan nesneleri de boşaltmak iyi bir alışkanlık olur.

Yani;

Kod:
Sub Web_XmlHttp()
    'metehan8001 - 18/07/2019
    'Haluk       - 18/07/2019
    'Not: Excel > VBA > References > Tools > MicrosoftHTML Object Library işaretlemeniz gerekmektedir.

    Dim xmlHTTPReq As Object
    Dim htmldoc As HTMLDocument
    Dim postURL As String

    Set xmlHTTPReq = CreateObject("MSXML2.XMLHTTP")
    Set htmldoc = New HTMLDocument

    postURL = "http://www.hurriyet.com.tr/ekonomi/"

    With xmlHTTPReq
        .Open "GET", postURL, False
        .Send
    End With

    htmldoc.body.innerHTML = xmlHTTPReq.responseText
    htmldoc.Close

    MsgBox htmldoc.getElementsByClassName("parite-value")(4).innerText

    Set htmldoc = Nothing
    Set xmlHTTPReq = Nothing
End Sub

.
 
Son düzenleme:
Estağfurullah ....
Sorun sadece nesnenin Late Binding olarak oluşturulmasından kaynaklanıyor. Oluşturulan HTMLfile nesnesinin içeriğindeki bazı nesneler, kodun çalıştırılması sırasında nesnenin Early veya Late Binding durumuna göre "expose" olmuyor. Yani, dokümanın içersinde oluşturulmuyor..... belli bir nedeni olduğunu da herhangibir kaynakta görmedim. Bu durum, MSXML2.XMLHTTP nesnesinin Early veya Late Binding oluşturulmasında da bazen karşımıza çıkabiliyor.
Sıkıntı bundan ibaret.... bunu da deneyerek bulmak gerekiyor.
Ayrıca, işi bittikten sonra htmldoc nesnesini kapatıp, oluşturulan nesneleri de boşaltmak iyi bir alışkanlık olur.
Sağol, varol Reis. Teşekkürler.
 
@Haluk reis müsaadenle;

@bsen sorunuza göre basit kod aşağıdaki gibidir.

C#:
Sub Web_XmlHttp()
'Not: Excel > VBA > References > Tools > MicrosoftHTML Object Library işaretlemeniz gerekmektedir.
Dim htmldoc As HTMLDocument
Set xmlHTTPReq = CreateObject("MSXML2.XMLHTTP")
Set htmldoc = CreateObject("htmlFile")
    postURL = "http://www.hurriyet.com.tr/ekonomi/"
    With xmlHTTPReq
        .Open "GET", postURL, False
        .Send
    End With
htmldoc.body.innerHTML = xmlHTTPReq.responseText
MsgBox htmldoc.getElementsByClassName("parite-value")(4).innerText
End Sub
Merhaba.
Bu konu deneyince alttaki mesaj çıkıyor.
Erişim engellendi.
.send kısmında kod hata veriyor.
 
http >>> https

.
 
Teşekkürler
 
Geri
Üst