VBA Değişken Tanımlama Biçimleri

Bu yazımızda sizlere VBA Değişken Tanımlama Biçimleri ‘ni anlatıyor olacağız. Değişkenler programcılığın temel öğelerinden biridir. Değişkenleri kullanmak ve yönetmek proje oluştururken olmazsa olmazlarımızdandır diyebiliriz. Olabildiğince sade biçimde sizlere anlatmaya çalışacağım. Hatırlatma: VBA ile ilgili diğer yazılarımızı da yine blog sayfamızda bulabilirsiniz. 👍🏻

 

VBA Değişken Tanımlama Biçimleri Hakkında

Değişkenler genellikle bir veriyi hafızada tutmak ve gerektiğinde bu veriyi kullanmak için vardır.
Değişkenler genelde iki sınıfa ayrılır. Global (Genel) değişkenler ve Local (Yerel) değişkenlerdir.
Global değişkenler programın bütün fonksiyonları tarafından kullanılabilirken, Local değişkenler sadece tanımlandıkları fonksiyonda kullanılır.
Bir prosedür, fonksiyon veya yürütülen bir modülün ömrü boyunca geri çağrılabilir, yeniden atanabilir veya sabitlenebilir.
Bir değişken bildirmek, kullanacağınız değişkenlerin adlarını ve değişkenin içereceği veri türünü belirtmenize olanak tanır.
Örneğin, Sonuç = 10 ise, değişken Sonuç bir Integer Tam sayı olarak bildirilebilir.
Değişken isimlerini genelde kısa ve akılda kalıcı bir biçimde oluştururuz. En çok tercih edilen değişken isimleri; i, a, n, x ,y ,z, s gibi tek karakterlik isimlerdir ki, kodlarda yazımı kolay olsun. Değişken adları kodlar içerisinde kullanırken hatırlayacağınız bir ad olursa, kod yazımı esnasında hata yapma olasılığınız azalır.
Şimdi tanımlama kısmına geçebiliriz.

 

Değişken tanımlama ile ilgili genel yazım kalıpları bu şekildedir.
Dim değişken_adı [(diziboyutu)] As tipi
Public değişken_adı [(diziboyutu)] As tipi
Static değişken_adı [(diziboyutu)] As tipi

 

Bu genel tanımlama ile beraber aşağıda belirtilen tanımlama yöntemleri de tercih edilebilir.

  1. Dim ile tanımlama
  2. Veri Tanımlayıcıları (Kısaltmalar) ile tanımlama
  3. DEF ile tanımlama

 

Dim ile Tanımlama

En çok bilinen ve kullanılan VBA Değişken Tanımlama yoludur.
Yazım kalıbını Syntax yukarıda belirttik. Tekrar birkaç örnekle netleştirelim.
Diyelim ki, A sütunundaki satırlarda (hücrelerde) kullanmak üzere satır adında bir değişken tanımlaması yapacağız, satır numaraları tam sayı oldukları için Veri Türleri makalemizde belirttiğimiz tam sayı veri tiplerinden birini kullanabiliriz. Kontrol ettireceğimiz satır sayısına veya hücrede olabilecek maksimum sayıya göre değişken veri tipini kullanmak daha uygun olacaktır. Sayısal ve Tam Sayı olarak kullanabileceğimiz, temelde uygun 3 değişken veri tipimiz var, ByteInteger ve Long. Eğer satır değişkenine atayacağımız sayısal veri 255 ve daha az ise, o zaman hafızada daha az yer kaplayan Byte değişken veri tipini kullanabiliriz. Eğer satır değişkenine atayacağımız sayısal veri -32767 ile +32768 arasında ise, o zaman da Integer değişken veri tipini kullanabiliriz. Daha büyük bir Tam Sayı olabilir ise, o zaman da Long değişken veri tipini kullanmalıyız. Eğer değişkeninin alabileceği maksimum sayıdan daha büyük bir sayı gönderilirse Overflow (Taşma) hatası alınır. Eğer Sayısal olarak belirtilen bir değişkene Metinsel bir ifade gönderilirse, o zaman da Type Mismatch (Tür Uyuşmazlığı) hatası alınız.

 

Dim ile Değişken tanımlamaya birkaç örnek verelim;

Sub PEAKUP()
    Dim satir As Long
    Dim sutun As Byte
    Dim metin As String
    Dim baslangic As Date
    Dim para As Currency
    Dim nesne As Object
    satir = 15
    sutun = 5
    metin = "Excel Turkey Forum"
    baslangic = "24.06.2018"
    para = 300
    Set nesne = ActiveSheet
End Sub

Bu şekilde her bir değişkeni ayrı ayrı satırlarda yazabildiğimiz gibi, istersek tek bir satırda da bu şekilde yan yana yazabiliyoruz.
Sadece en başta Dim olması gerekiyor ve her bir değişken arasına virgül koyarak devam ediyoruz.

Sub PEAKUP()
    Dim satir As Long, sutun As Byte, metin As String
    Dim baslangic As Date, para As Currency, nesne As Object
End Sub

Burada şuna dikkat etmek gerekiyor. Bazı kullanıcılar şurada yanılgıya düşüp yanlış bir tanımlama yapabiliyorlar.
Yukarıda yazdığım kodu eğer bu aşağıdaki gibi yazmaya kalkarsanız, yani Dim ile başlayıp ilk değişkeni tanımladım diyerek, devam eden yandaki değişkenleri de uygun değişken veri tipleri ile tanımlamış olmazsınız.. “sutun”, “metin” tanımlamalarında veri tipleri belirtilmediği için, Byte ve String değil, tanımsız veri tipi olan Variant olarak belirtilmiş olur. Dim ile tanımladığım ilk değişkende veri tipi belirttiğiniz için, devamında gelen diğer değişkenleri de tanımlamış olmuyorsunuz, her bir değişenin ayrı ayrı tipini de belirtmelisiniz.

 

Veri Tanımlayıcıları (Kısaltamalar) ile tanımlama

Abbreviations (Kısaltmalar)

Tür Bildirim son ekleri olarak da bilinir.
Bu çok fazla kullanılmaz ama kodlarda tasarruf sağlar.
VBA’ya değişken adının sonuna özel bir karakter ekleyerek bir değişken türünü söylemek de mümkündür.

Dim sayi% 'Integer
Dim uzunsayi& 'Long
Dim toplam! 'Single
Dim alttoplam# 'Double
Dim odeme@ 'Currency
Dim adi$ 'String
Dim enuzunsayi^ ' 64 bit'te LongLong

 

Veri Türü Kısaltması İfade Karakterleri

VBA

, veri türünü belirtmenin hızlı bir yolu olarak, bir değişkenin adına bir karakter eklemenize izin verir.
Değişkenleri bildirmek için bu yöntem kullanılmamalıdır ve yalnızca geriye dönük uyumluluk amacıyla kullanılabilir.
Aşağıdaki satır bir Double veri türü ile bir değişken bildirecektir.

Dim dDouble#

Ancak bu satır “As” anahtar sözcüğünü kullanarak bildirilmesi daha doğru olur.
Dim dDouble As Double

 

Veri Türü Kısaltmalar / Son Ekler

Eğer kısaltmaları kullanırsanız, o zaman türü bildirmek zorunda değilsiniz.
% ifadesini kullanırsanız, “As Integer” yazmanız gerekmez.
Bu kısaltmalar, Variant‘lara hazır bilgi atamak için yararlı olabilir.

Örnek; sayim = 10#

 

DEF ile Tanımlama

Değişkenlerimizi belirttiğimiz gibi birkaç farklı yöntemle tanımlayıp bildirebiliyorduk, bu yöntemlerden biri de DEF ile tanımlama.
Bu tanımlama genellikle kod penceresinin en üstünde prosedürden bağımsız olarak yapılır.
Değişken olarak kullandığımız isim ve veri tipini aşağıdaki gibi kısaltarak tanımlamasını yapabiliyoruz.
Def+Tür ‘den sonra gelen harf ile başlayan değişkenlerin o türde olduğunu ifade eder.

def ile değişken tanımlama tablosu

Def ile tanımlamaya Dim ile arasındaki farkı gösteren bir örnek verelim..

Öncelikle Dim ile değişkenlerimizi bu şekilde tanımlayalım.

Sub PEAKUP()
    Dim satir As Integer, sutun As Integer
    Dim metin As String, harf As String, kelime As String
    Dim tarih As Date, baslangic As Date
    Dim rakam As Double, fiyat As Double
    satir = 10
    sütun = 5
    metin = "PEAKUP"
    harf = "E"
    kelime = "Kitap"
    tarih = "24.06.2018"
    baslangic = "14.12.1980"
    rakam = 1453.48
    fiyat = 5647.15
End Sub

Şimdi bu tanımlamayı bir de Def ile yapalım.

DefInt S
DefStr H, K, M
DefDate B, T
DefDbl F, R
Sub PEAKUP()
    satir = 10
    sütun = 5
    metin = "PEAKUP"
    harf = "E"
    kelime = "Kitap"
    tarih = "24.06.2018"
    baslangic = "14.12.1980"
    rakam = 1453.48
    fiyat = 5647.15
End Sub

Gördüğünüz gibi sadece baş harflerini kullanarak türünü belirtip değişken tanılaması yapmış olduk.
Bu noktada değişken tanımlamaları fazla yer kaplamasın ve daha az satırda görünsün isterseniz, Aşağıda belirtildiği gibi Def satırlarını iki nokta üst üste ( : ) ile tek satırda yan yana yazabilirsiniz.

DefInt S: DefStr H, K, M: DefDate B, T: DefDbl F, R
Sub PEAKUP()
    satir = 10
    sütun = 5
    metin = "PEAKUP"
    harf = "E"
    kelime = "Kitap"
    tarih = "24.06.2018"
    baslangic = "14.12.1980"
    rakam = 1453.48
    fiyat = 5647.15
End Sub

Bu arada tüm değişken isimlerini, değerlerini ve türlerini Locals Window‘dan kolaylıkla takip edebilir ve değerlendirebilirsiniz.

def ile değişken tanılamayı locals windowda görüntüleme

 

Daha fazla detay için Microsoft Docs sayfasına bakabilirsiniz.

Diğer yazılarımızda görüşmek üzere, hoşça kalın. 🙋🏻‍♂️
Bu yazımızı çevrenizle paylaşarak birçok kişinin de bilgi sahibi olmasını sağlayabilirsiniz. 👍🏻

IF KARAR YAPISI İLE ŞARTA GÖRE İŞLEMLER

Bu yazımızda sizlere; makro tarafında olmazsa olmaz bir karar/koşul yapısından bahsediyor olacağım. Yazının sonunda IF Karar yapısı nedir, ne zaman ve nasıl kullanılırı öğrenmiş olacağız.

 

IF KARAR YAPISI NEDİR?

Bu

koşul yapısı; bütün programlama dillerinde olan, bazı şartların gerçekleşmesi veya gerçekleşmemesi durumunda ayrı-ayrı kod bloklarının çalıştırılmasına imkân veren yapıdır.

Belirtilen koşuldan geri dönen True/False Boolean değerine göre işlemler yapabilmenizi sağlar.
Eğer koşulun True Doğru olduğu söylenirse, belirtilen koşul(lar)ın altında bulunan ifadeler uygulanır.
Koşulun False Yanlış olduğu söylenirse, IF yapısından sonra belirtilen ifadeler uygulanır. İlaveten, duruma göre Else veya ElseIF ifadelerini belirttiysek o satırların da kontrolünü sağlar ve ne zaman sonuç True dönerse orada belirtilen komutlar uygulanır.

 

NE ZAMAN KULLANILIR? 

Kod yazarken, Eğer ile başlayan bir düşüncemiz/şartımız varsa ve bir veya birden fazla şarta göre işlemler yaptırmak istiyorsak genellikle bu yapıyı kullanırız. Bu yapıdan başka birkaç Karar/Koşul yapısı daha mevcuttur, bunlar; Select Case, IIF, Choose ve Switch yapılarıdır. Bu yapılara da hâkim olmak kod yazarken sizi rahatlatacaktır.

 

NASIL KULLANILIR?

Öncelikle yazım kalıbı veya söz dizimi dediğimiz durumu, yani bu IF yapısını VBA tarafında nasıl yazabiliriz ona bir bakalım.

 

YAZIM KALIBI

Yazım kalıbı Syntax aşağıdaki gibidir..
Mavi renkli kısımlar sabittir.
Kırmızı renkli kısımlar değişkendir.

If koşul(lar) Then
‘Kodlarınız
End If

Mantık olarak kabaca şöyle düşünebilirsiniz; “Eğer bu sayı 10’dan büyükse bunları yap.” gibi..

Eğer tek bir koşulumuz şartımız varsa, yukarıdaki kalıbı bu şekilde de kullanabilirsiniz.
If koşul(lar) Then ‘Kodlarınız
Tek şart varsa, End If ifadesini kaldırıp, koşulu Then ifadesinin yanına yazabilirsiniz.
If ve Then arasındaki koşulumuz da, duruma göre birden fazla olabilir.
Yani örneğin; A sütunundaki hücrelerdeki sayılar 10‘dan büyükse ve boş değilse gibi, And, Or, Xor vb. Mantıksal operatörleri de kullanabilirsiniz.

Şimdi bu kısmı tam olarak anlamanız için ufak bir kod örneği verelim..

If sayi > 10 And sayi < 20 Then

Tek bir If .. Then kalıbı arasında mantıksal operatörler kullanarak, koşulumuzu kendi içinde 2-3-4…’e çıkarabilirsiniz. Diyelim ki; A2:A10 hücre aralığında bazı sayılarımız var ve bu sayılardan 10‘dan büyük olanların B sütununa büyük ifadesini yazdıralım.

Bunun için bize gerekli olan kodlar bu şekildedir;

Sub IF_Kosul_Yapisi()
    For i = 2 To 10
        If Cells(i, "A") > 10 Then
            Cells(i, "B") = "Büyük"
        End If
    Next i
End Sub

Bu kodların nasıl çalıştığını gif resimde görerek daha iyi anlayabilirsiniz.

IF yapısı

 

BİRDEN FAZLA KOŞUL VE ELSE

Eğer birden fazla koşulumuz var ise ve mantık olarak, Eğer böyleyse bunu yap, değilse şunu yap gibi, iki farklı duruma göre işlem yapmak istiyorsanız, bunu da yine tek bir satırda bu şekilde yazabileceğiniz gibi;

If Cells(i, "A") > 10 Then Cells(i, "B") = "Büyük" Else Cells(i, "B") = "Küçük"

alt alta Else ifadesiyle birlikte de yazabilirsiniz. O zaman kalıbımız bu şekilde olacaktır.
If koşul(lar) Then
‘Doğruysa Kodlarınız
Else
‘Yanlışsa Kodlarınız
End If

Örnek kodlarımız..

If Cells(i, "A") > 10 Then
    Cells(i, "B") = "Büyük"
        Else
    Cells(i, "B") = "Küçük"
End If

Yukarıdaki kod, 10‘dan büyük olan hücrelerin sütununa Büyük, küçük olanların da sütununa Küçük yazar.

 

ELSEIF

Şimdi de ElseIf DeğilseEğer ifadesini dahil ederek koşullarımızı artıralım.
Bu kalıpta da mantığı kabaca şöyle düşünebilirsiniz; “Eğer bu böyleyse bunu yap, değilse eğer şöyleyse şunu yap, değilse eğer öyleyse onu yap.” gibi..

Yazım Kalıbı bu şekildedir..
If koşullar Then
‘kodlarınız
ElseIf koşullar Then
‘kodlarınız
ElseIf koşullar Then
‘kodlarınız
End If

Sonuc sütununa sonuçlarımızı bu şartlara göre yazdıralım.

  • Eğer sayı sıfıra eşitse Sıfır yazsın.
  • Eğer sayı 10’a eşitse Eşit yazsın.
  • Eğer sayı 10’dan küçükse Küçük yazsın.
  • Eğer sayı 10’dan büyükse Büyük yazsın.

Belirttiğimiz bu şartlarımıza göre, bize gereken kodlar bu şekilde olacaktır..

Sub Eger_Kosul_Yapısı_2()
    Dim i As Integer
    For i = 2 To Range("A65536").End(3).Row
        If Cells(i, "A") = 0 Then
            Cells(i, "B") = "Sıfır"
        ElseIf Cells(i, "A") = 10 Then
            Cells(i, "B") = "Eşit"
        ElseIf Cells(i, "A") < 10 Then
            Cells(i, "B") = "Küçük"
        ElseIf Cells(i, "A") > 10 Then
            Cells(i, "B") = "Büyük"
        End If
    Next i
End Sub

Bu kodları da gif resim üzerinde nasıl çalıştığını görerek daha net anlayabilirsiniz.

 

ELSEIF ve ELSE BİRLİKTE

Son olarak kodlarımıza, eğer yukarıda belirttiğimiz şartların hiçbirine uymuyorsa, o zaman End If satırından önce Else değilse ifadesi dahil edilerek, bu şekilde hücreye başka bir sonuç da yazdırılabilir.

Sub Eger_Kosul_Yapısı_3()
    Dim i As Integer
    For i = 2 To Range("A65536").End(3).Row
        If Cells(i, "A") = 0 Then
            Cells(i, "B") = "Sıfır"
        ElseIf Cells(i, "A") = 10 Then
            Cells(i, "B") = "Eşit"
        ElseIf Cells(i, "A") < 10 Then
            Cells(i, "B") = "Küçük"
        Else
            Cells(i, "B") = "Büyük"
        End If
    Next i
End Sub

 

Daha fazla detay için Visual Basic’te Koşul Yapılarını buradan inceleyebilirsiniz.

 

Diğer yazılarımızda görüşmek üzere, hoşça kalın. 🙋🏻‍♂️
Bu yazımızı çevrenizle paylaşarak birçok kişinin de bilgi sahibi olmasını sağlayabilirsiniz. 👍🏻

Excel ile Web Sitelerinden Veri Çekin

Excel ile dilediğiniz web sitesinden veri çekebileceğinizi biliyor musunuz?

 

Excel‘in Veri menüsünden Web Sitelerine bağlanıp oradan veri alma özelliği var, fakat bu özellik maalesef tam olarak bize istediğimiz verileri sağlayamıyor. O yüzden istediğimiz veriyi farklı bir yolla elde etmek durumundayız. Nasıl mı? Tabii ki VBA‘nın yani makroların gücünü kullanarak.

Makro bilmiyor olabilirsiniz, bunu dert etmeyin. Yazacağımız kodların birçok satırı klişedir, olabildiğince basit bir anlatımla bu işin ne kadar kolay olduğunu anlatacağım.

Normal şartlarda, webten veri alma işlerinizi yapabilmeniz için, VBA (Makro) bilginiz olmalı, web sitelerinin HTML kaynaklarından veri alacağımız için temel de olsa HTML yapıya, temel Css bilgisine sahip olmanız gerekmektedir. Fakat hiçbir bilginiz olmasa da, klişe olan noktaları zaten belirteceğim, sonrasında nereden nasıl veri aldığımızı da Document Object Model (DOM) üzerinde göstereceğim.

Bu sizi teşvik etmek adına basit bir başlangıç olsun, geliştirme tarafı size kalsın. Bu yazıda şunu yapacağız; kendi sitemizdeki blog sayfamızda www.peakup.org/blog  yayınlanan postların başlıklarını ve tarihlerini çekelim, başlıklara da o postun linkini köprü olarak ekleyelim ki; tıkladığımızda o linke gidebilelim. Bu resimde nereleri alacağımızı belirtiyorum.

 

Hadi artık başlayalım.

 

Öncelikle Excel‘de herhangi bir sayfadayken ALT + F11 tuşlarına basarak VBE (Visual Basic Editör) penceresine gidelim. Pencerenin üst menülerinden Insert ve Module tıklayıp boş bir modül açalım, kodlarımızı bu boş pencereye yazacağız. Adım adım her bir kod satırının ne anlama geldiğini de size aktarıyor olacağım. Bu arada yazının sonunda kodların son hâlini de bulabilirsiniz.

İlk satırımızda makromuza bir isim veriyoruz. Makromuzun adı PEAKUP_BLOG olsun.
Sub PEAKUP_BLOG()
hemen altına kodlarda kullanacağımız değişkenlerimizi tanımlıyoruz.
Dim ie As Object, meta As Object, i As Integer, basla As Single
Kodların sonunda sayfaya ekleyeceğimiz butona her batığımızda makromuzu çalıştıracağız, yani postları yeniden çektireceğiz, yeni post varsa o da gelecek. O yüzden eski verileri temizlemek için bu satırı kullanıyoruz. A2:B100 hücrelerinde ne varsa temizle diyoruz.
Range("A2:B100").Clear
sonrasında görev yöneticisinde açık olan tüm Internet Explorer pencerelerini kapatıyoruz, açık kalmaları hem uygulamanın şişmesine hem de bazı hatalar almamıza sebep olacağı için bu işlemi yapıyoruz.
Shell "taskkill /f /im iexplore.exe"
sonrasında tüm ie pencerelerinin kapandığından emin olmak için 1 sn. bekletme kodlarını ekliyoruz.
basla = Timer: While (Timer - basla) < 1: Wend
Şimdi Internet Explorer‘ı oluşturuyoruz.
Set ie = CreateObject("InternetExplorer.Application")
oluşturulan uygulamanın ekranda görünmemesi ama arka plânda yine çalışmaya devam etmesi için bu satırı ilave ediyoruz.
ie.Visible = False
sonrasında blog sayfamıza yönlendiriyoruz.
ie.navigate "https://peakup.org/blog/"
biliyorsunuz bir web adresine gittiğinizde o sayfanın tam olarak yüklenmesi biraz zaman alıyor. Bu zamanı aşağıdaki kodlarla kontrol ettiriyoruz ve sayfa tamamen yüklenene kadar dön/bekle diyoruz.
While ie.Busy Or ie.ReadyState < 4: DoEvents: Wend
şu ana kadar, şunları yaptık;

  • Makromuza isim verdik
  • Değişkenlerimizi tanımladık
  • Açık olan tüm IE tarayıcılarını kapattık ve ilave 1 sn. de bekle dedik
  • IE’yi oluşturduk ve gizledik
  • Blog sayfamıza yönlendirdik
  • Sayfanın meşguliyeti bitene ve tamamen yüklenene kadar bekle dedik

artık sayfa tam orak önümüzde olduğuna göre, HTML yapısından faydalanarak istediğimiz verilerin nerede olduğunu tespit edip, bütün postların başlıklarını, başlıkların linklerini ve tarihlerini hızlıca aldırabiliriz.

Blog sayfamız sürekli güncel ve aktif olduğundan dolayı birden fazla postumuz mevcut. Bütün postlara tek tek bakmamız ve başlıklarını almamız gerekiyor. Bunu VBA‘nın olmazsa olmazı Döngüler’i kullanarak yapacağız.  For veya For Each döngüsünden birini burada kullanabiliriz.

Almak istediğimiz başlığa ait, id, name, class, tag gibi özellikleri kullanarak tespit etmemiz gerekiyor. Nasıl yapacağımızı gif resimde görüyorsunuz. Alacağımız yer neresi ise, üzerine gelip sağ click yaparak İncele diyoruz.

Baktığınızda bütün verilerin  <div class=”mk-blog-meta”> altında tutulduğunu göreceksiniz.  HTML yapısı ağaç yapısı şeklindedir.

For döngüsü ile bütün bu mk-blog-meta class ismine sahip olan postları kontrol ettirelim;
Genellikle alacağımız ilk elemanın değeri sıfır olur ve aşağıdaki gibi sıfırdan başlayıp kaç tane ise -1 sayısı kadar dön/bak deriz.
For i = 0 To ie.document.getelementsbyclassname("mk-blog-meta").Length - 1
Biz bu noktada hem başlığı hem de tarihi almak istediğimiz için aynı satırları tekrar tekrar yazmak yerine bir kere set ediyoruz adına da meta diyoruz. Artık meta yazsını gördüğümüzde her bir post aklımıza gelsin. Aşağıdaki satırda parantez içindeki ( i ) ilk posttan  başlayıp kaç tane post varsa hepsinde dönmek için 0-1-2-3-4 … şeklinde ilerlememizi sağlayacak.
Set meta = ie.document.getelementsbyclassname("mk-blog-meta")(i)
Şimdi başlıklarımızı alabiliriz. Bu satırda diyoruz ki, her bir postun altındaki class adı the-title olan metni  A2 hücresinden itibaren alt alta yaz.
Range("A" & i + 2) = meta.getelementsbyclassname("the-title")(0).innertext
Başlıkları aldığı andan itibaren de hemen post linkine köprü yapalım. Bunun için de bu kodu kullanacağız..
Kodda der ki; A2‘ye köprü kur, adres olarak olarak postun altındaki a tagında bulunan linki kullan ve görünen yazı olarak da yine A2’deki metni yaz.
ActiveSheet.Hyperlinks.Add Anchor:=Range("A" & i + 2), _
Address:=meta.getelementsbytagname("a")(0).href, _
TextToDisplay:=Range("A" & i + 2).Value

Evet başlığımızı alıp köprümüzü kurduk. Şimdi tarih kısmını da B sütununa alalım. Aşağıdaki satırda, her bir postun altındaki mk-blog-meta-wrapper class’ındaki metni alıyoruz.
Cells(i + 2, "B") = meta.getelementsbyclassname("mk-blog-meta-wrapper")(0).innertext
Next i
satırı ile For döngüsünden çıkıp sonlandırıyoruz.
ie.Quit
satırı ile IE tarayıcıyı kapatıyoruz.
MsgBox "Islem Tamamlandi.", vbInformation, "PEAKUP BLOG"
İşimiz bitince İşlem Tamamlandı mesajı verdiriyoruz.
End Sub
satırı ile de makromuzu sonlandırıyoruz.

 

Her bir kod satırının ne anlama geldiğini yazdıktan sonra kodlarımızı bir toparlayıp görelim.


Sub PEAKUP_BLOG()
Dim ie As Object, meta As Object, i As Integer, basla As Single
Range("A2:B100").Clear
Shell "taskkill /f /im iexplore.exe"
basla = Timer: While (Timer - basla) < 1: Wend
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = False
ie.navigate "https://peakup.org/blog/"
While ie.Busy Or ie.ReadyState < 4: DoEvents: Wend
For i = 0 To ie.document.getelementsbyclassname("mk-blog-meta").Length - 1
Set meta = ie.document.getelementsbyclassname("mk-blog-meta")(i)
Range("A" & i + 2) = meta.getelementsbyclassname("the-title")(0).innertext
ActiveSheet.Hyperlinks.Add Anchor:=Range("A" & i + 2), _
Address:=meta.getelementsbytagname("a")(0).href, _
TextToDisplay:=Range("A" & i + 2).Value
Cells(i + 2, "B") = meta.getelementsbyclassname("mk-blog-meta-wrapper")(0).innertext
Next i
ie.Quit
MsgBox "Islem Tamamlandi.", vbInformation, "PEAKUP BLOG"
End Sub

Artık oluşturduğumuz kodları çalıştırmak kaldı. Onun için Ekle menüsündeki Şekillerden butona benzer bir şekil ekleyin ve sağ tıklayıp Makro Ata deyin, açılan pencereden PEAKUP_BLOG makrosunu seçip Tamama basın.

Oluşturduğumuz bu butona her bastığınızda eski verileri temizleyip yeni post varsa onlarla beraber yeniden çekecektir.

Sitemizdeki postları takipte kalmanız umuduyla, kodların da içinde olduğu Excel dosyasını resme tıklayarak indirebilirsiniz.

Daha fazla bilgi için Excel ile Webten Veri Alma Eğitim talebinde bulunabilirsiniz.
Eğitim sonrasında her türlü, haber, finans, spor, e-ticaret vb. sitelerden veri çekebilir hâle gelebilirsiniz.

Faydalı olması dileğiyle..