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

metehan8001

Yasaklı
Katılım
8 Nisan 2010
Mesajlar
125
Excel Vers. ve Dili
Office 2007 -2016 TR
@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
 
Katılım
14 Ekim 2005
Mesajlar
187
Excel Vers. ve Dili
Office 365 for Business
Altın Üyelik Bitiş Tarihi
18-07-2022
@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?
 

metehan8001

Yasaklı
Katılım
8 Nisan 2010
Mesajlar
125
Excel Vers. ve Dili
Office 2007 -2016 TR

MsgBox htmldoc.getElementsByClassName("parite-value")(4).innerText
bu kodun başındaki "MsgBox" yerine "Range("A1") =" yazmanız yeterlidir.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,286
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Özel kişi
@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

Yasaklı
Katılım
8 Nisan 2010
Mesajlar
125
Excel Vers. ve Dili
Office 2007 -2016 TR
@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 ?
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,286
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Özel kişi
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:

metehan8001

Yasaklı
Katılım
8 Nisan 2010
Mesajlar
125
Excel Vers. ve Dili
Office 2007 -2016 TR
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.
 
Katılım
5 Kasım 2006
Mesajlar
572
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
@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.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,286
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Özel kişi
http >>> https

.
 

ibere

Altın Üye
Katılım
31 Mart 2018
Mesajlar
129
Excel Vers. ve Dili
Office 365
Altın Üyelik Bitiş Tarihi
21-04-2027
Teşekkürler
 
Üst