• DİKKAT

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

Application.OnTime ve WorkSheet_Change hak.

Katılım
19 Temmuz 2008
Mesajlar
5
Excel Vers. ve Dili
Office 2003 Türkçe
Merhaba,

Konuları takip ediyorum. Gerçekten çok güzel paylaşımlar oluyor. Bilgilerini paylaşan herkese öncelikle çok teşekkür etmek isterim.

Benzer konuları araştırdım ancak bir türlü işin içinden çıkamadım. Aşağıdaki konuda değerli yardımlarınızı talep ediyorum...

Excel dosyamda web'den 60 saniyede bir veri alınıyor ve alınan veri bir formülle değiştirilerek (hesaplanarak) örneğin A1 hücresine yazılıyor. Veri 60 saniyede bir web'den alındığında bir önceki verinin aynısı da olabilir değişmiş de olabilir.

İstediklerim:
1) Excel açıldıktan 10 saniye sonra (web'den veri alınmasını beklemek için) A1 hücresindeki değeri B1'e yazsın.
2) Web'den veri alındıkça eğer alınan veri değişirse (dolayısıyla A1'de değişecektir) değişen her A1 değerini B1'de sırayla alt alta yazsın. A1 değişmezse web'den veri alınsa da bieşey yapmasın.

Yardımlarınız için şimdiden çok teşekkür ederim.

Saygılarımla,
 
Birinci sorunuz için aşağıdaki kodu thisworkbook modülüne kopyalayın. Kod içindeki sayfa adını kendi dosyanızdakine göre değiştirirsiniz.

Kod:
Private Sub Workbook_Open()
Application.Wait Now + TimeValue("00:00:10")
[sayfa1!b1] = [sayfa1!a1]
End Sub

İkinci sorunuz içinde aşağıdaki kodu ilgili sayfanın kod sayfasına kopyalayarak deneyin.

Kod:
Private Sub Worksheet_Calculate()
If [b65536].End(3) <> [a1] Then
[b65536].End(3).Offset(1, 0) = [a1]
End If
End Sub
 
Çok teşekkür ederim Levent Bey elleriniz dert görmesin çalıştı. Sadece şöyle bir sorun var:

Başlangıçtan 10 sn sonra veriyi B1'e yazıyor. Sonra A1 her değiştiğinde sırayla B sütununda aşağı doğru ilerliyor. Ancak, kapatıp tekrar açtığımda ilk değeri yine B1'e yazıyor. Oysaki B sütununda kaldığı yerden devam etmesi gerekiyor. Bu nasıl yapılabilir?
 
Merhaba,

Levent beyin önerdiği kodu aşağıdaki şekilde değiştirip denermisiniz.

Kod:
Private Sub Workbook_Open()
    Application.Wait Now + TimeValue("00:00:10")
    If [sayfa1!b1] = "" Then
        [sayfa1!b1] = [sayfa1!a1]
    Else
        [sayfa1!b1].End(3).Offset(1, 0) = [sayfa1!a1]
    End If
End Sub
 
Teşekkürler Korhan Bey, o sorun düzeldi sanırım. Şu anda bir sorunla karşılaşmadım ancak şöyle bir durum var:

Ben başlangıçta 10 saniye beklemesini istemiştim. Bunun nedeni açıldığında internetten veriyi almasını beklemekti. Ama gördüğüm kadarıyla application.wait komutu tüm işlemleri bekletiyor ve o 10 saniyelik sürede veri almıyor...
 
Merhaba,

Bu durumda kodları aşağıdaki şekilde değiştirin.


ThisWorkbook olayına;

Kod:
Private Sub Workbook_Open()
[COLOR=red]   '1 - Dosya açıldıktan 10 saniye sonra AKTAR isimli makroyu çalıştır. Bu arada sizin nettten bilgi alan sorgunuz çalışacak.[/COLOR]
    DoEvents
    Application.OnTime Now + TimeValue("00:00:10"), "AKTAR"
End Sub


İlgili sayfanın kod bölümüne;

Kod:
Private Sub Worksheet_Calculate()
[COLOR=red]   '3 - Netten bilgiler sayfaya geldiğinde hücreler değiştiği için sayfanız otomatikman hesaplama moduna geçecektir. Gelen bilgiler B sütununda alt alta listelenecektir.[/COLOR]
    If [B65536].End(3) <> [A1] Then
    [B65536].End(3).Offset(1, 0) = [A1]
    End If
End Sub


Boş modüle;

Kod:
Sub AKTAR()
[COLOR=red]   '2 - Dosya açılışında sizin nettten bilgi alan sorgunuz çalışacak. 10 saniye sonra bu makro devreye girecek ve Sayfa1 isimli sayfanızın B sütununa alt alta listeleme yapılacaktır.[/COLOR]
    If [Sayfa1!B1] = "" Then
        [Sayfa1!B1] = [Sayfa1!A1]
    Else
        [Sayfa1!B1].End(3).Offset(1, 0) = [Sayfa1!A1]
    End If
End Sub

Bu şekilde dosyanızın açılışında verileriniz alınacak ve 10 saniye sonra AKTAR isimli makro çalışacak. Deneyip sonucu bildirirmisiniz.
 
:) Korhan Bey süpersiniz. Kimsenin kimseye karşılıksız yardım etmediği bu dünyada sizden böylesine yardım görmek beni çok mutlu etti. Allah razı olsun.

Sizden aldığım bilgilerle kodu kendi excel'ime uyarladım ve şu anda tıkır tıkır çalışıyor. Ezberden ziyada mantığı anlamak adına ve eğer çok zamanınızı almayacaksam bu kodu kısaca bana anlatabilir misiniz?

Herşey için çok çok teşekkür ederim...
 
Merhaba,

Üstteki mesajımda kod aralarına kırmızı renkle gerekli açıklamaları yaptım. İncelermisiniz.
 
Teşekkürler Korhan Bey, yalnız bir hata keşfettim. Excel açıldıktan sonra değişen değerleri sırayla alt alta yazıyor, yani sıkıntı yok, ancak ertesi gün açtığımda sabah yenilenen ilk veriyi hem sütundaki boş sıraya hemde sütunun en başına yazıyor. Oysa sadece dün sütunda kaldığı yerden devam etmeliydi. Neden acaba fikriniz var mıdır?
 
Merhaba,

Eğer Sayfa1 isimli sayfanızın B1 hücresi boşsa sizin dediğiniz gibi ilk hücreye bilgiyi yazar. Bunun dışında kodda bu şekilde davranacak bir yapı yok.

Belki dosyanızda buna sebep olan başka işlemler vardır. Sakıncası yoksa eklerseniz deneme şansımız olabilir.
 
Geri
Üst