saat geldiğinde makro çalışsın

İ

İhsan Tank

Misafir
selam arkadaşlar
bir çalışma yapıyorum istediğim günün belli bir saatini yazdığımda o saat geldiğinde otomatik makro çalışsın.
bir de elle tetiklendiğinde çalışmasını isteyeceğim.
ayrı ayrı olursa sevirim.
şimdiden teşekkür ederim
örnek dosya ekte
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,245
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

1. Sorunuz için boş bir modüle aşağıdaki kodu uygulayın.

Kod:
Option Explicit
 
Sub Auto_Open()
Başla:
    DoEvents
    If Time = Sheets("Sayfa1").Range("A1") Then
        Makronuz
    Else
        GoTo Başla
    End If
End Sub
 
Sub Makronuz()
    MsgBox "İşleminiz başarıyla tamamlanmıştır."
    End
End Sub

2. Sorunuz için Sayfa1 in kod bölümüne aşağıdaki kodu uygulayın. E1 hücresine elle gireceğiniz zaman bilgisi sistem zamanı ile eşleşiyorsa makronuz çalışacaktır. Makronuzun çalışması için saniyeyi yakalamanız gerekiyor.

Kod:
Option Explicit
 
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [E1]) Is Nothing Then Exit Sub
    If Time = Target Then Makronuz
End Sub
 

Ekli dosyalar

İ

İhsan Tank

Misafir
Selamlar,

1. Sorunuz için boş bir modüle aşağıdaki kodu uygulayın.

Kod:
Option Explicit
 
Sub Auto_Open()
Başla:
    DoEvents
    If Time = Sheets("Sayfa1").Range("A1") Then
        Makronuz
    Else
        GoTo Başla
    End If
End Sub
 
Sub Makronuz()
    MsgBox "İşleminiz başarıyla tamamlanmıştır."
    End
End Sub

2. Sorunuz için Sayfa1 in kod bölümüne aşağıdaki kodu uygulayın. E1 hücresine elle gireceğiniz zaman bilgisi sistem zamanı ile eşleşiyorsa makronuz çalışacaktır. Makronuzun çalışması için saniyeyi yakalamanız gerekiyor.

Kod:
Option Explicit
 
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [E1]) Is Nothing Then Exit Sub
    If Time = Target Then Makronuz
End Sub
korhan hocam teşekkür ederim.
 
İ

İhsan Tank

Misafir
Selamlar,

1. Sorunuz için boş bir modüle aşağıdaki kodu uygulayın.

Kod:
Option Explicit
 
Sub Auto_Open()
Başla:
    DoEvents
    If Time = Sheets("Sayfa1").Range("A1") Then
        Makronuz
    Else
        GoTo Başla
    End If
End Sub
 
Sub Makronuz()
    MsgBox "İşleminiz başarıyla tamamlanmıştır."
    End
End Sub
hocam bir soru daha sorayım
buraya mesela A2'deki Saatide eklemek istersem nasıl bir kod yazmalıyım
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,245
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

Aşağıdaki şekilde kullanabilirsiniz.

Kod:
Option Explicit
 
Sub Auto_Open()
Başla:
    DoEvents
    If Time = Sheets("Sayfa1").Range("A1") Then
        Makronuz_1
    ElseIf Time = Sheets("Sayfa1").Range("A2") Then
        Makronuz_2
    Else
        GoTo Başla
    End If
End Sub
 
Sub Makronuz_1()
    MsgBox "İlk makro çalışmıştır."
    End
End Sub
 
Sub Makronuz_2()
    MsgBox "İkinci makro çalışmıştır."
    End
End Sub
 
İ

İhsan Tank

Misafir
korhan hocam ilgin için teşekkür ederim.
yalnız şöyle bir sıkıntı var ben bu kodu 3 veya daha fazla satırda aktif kullanacağım. 2 satırda çalıştırdım 3. satır çalışmadı.
dosya ekte
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,245
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

Birden fazla koşul için Time değerini bir değişkene atamakta fayda var. Çünkü Time değeri sürekli değişen bir değer. Bu sebeple döngü içinde sürekli değiştiğinden hücredeki değerle eşleşse dahi koşul sırasından kaynaklanan gecikmeden dolayı kod içinde eşleşme gerçekleşmiyor. Önerdiğim kodu aşağıdaki şekilde değiştirip deneyin.

Kod:
Option Explicit
Dim Soru As Byte
Dim Zaman As Date
 
Sub Auto_Open()
Başla:
    DoEvents
    Zaman = Time
 
    If Zaman = Format(Sheets("Sayfa1").Range("A1"), "hh:mm:ss") Then
        Makronuz_1
    ElseIf Zaman = Format(Sheets("Sayfa1").Range("A2"), "hh:mm:ss") Then
        Makronuz_2
    ElseIf Zaman = Format(Sheets("Sayfa1").Range("A3"), "hh:mm:ss") Then
        Makronuz_3
    Else
        GoTo Başla
    End If
End Sub
 
Sub Makronuz_1()
    Soru = MsgBox("A1 Satırı", Buttons:=vbQuestion + vbYesNo)
    If Soru = vbYes Then
    Auto_Open
    End If
End Sub
 
Sub Makronuz_2()
    Soru = MsgBox("A2 Satırı", Buttons:=vbQuestion + vbYesNo)
    If Soru = vbYes Then
    Auto_Open
    End If
End Sub
 
Sub Makronuz_3()
    Soru = MsgBox("A3 Satırı", Buttons:=vbQuestion + vbYesNo)
    If Soru = vbYes Then
    Auto_Open
    End If
End Sub
 

Ekli dosyalar

Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
Hocam merhabalar; aynı konu olduğu için yeni konu açmayayım dedim. Bende kendi çalışmama göre uyarladım bu kodları fakat, sonsuz döngüye giriyor ve durdurmak mümkün olmuyor, exceli kilitliyor doğal olarak buna nasıl bir çözüm yapabiliriz.

Sayfaya istediğim zaman durdurmak için Control isimli sayfaya toggle button la A1 hücresine Run ve Stop yazdırdım
ve Control sayfasında B2 hücresine makronun çalışmaya başlamasını istediğim saati
B3 hücresine de durmasını istediğim saati yazdım.

Kodlarım şu şekilde;


C++:
Private Sub ToggleButton1_Click()
ToggleButton1.Caption = "ÇALIŞIYOR"
If ToggleButton1.Value = True Then
Range("A1").Value = "RUN"
Call control
Else
ToggleButton1.Caption = "DURDURULDU"
Range("A1").Value = "STOP"
End If
End Sub
C++:
Option Explicit
Dim Zaman As Date

Sub control()
Başla:

If Sheets("CONTROL").Range("A1") = "STOP" Then
GoTo Başla
Else
    DoEvents
    Zaman = Time
     If Zaman >= Format(Sheets("control").Range("b2"), "hh:mm:ss") And Zaman <= Format(Sheets("control").Range("b3"), "hh:mm:ss") Then
        deneme
   
   
        GoTo Başla
        End If
      GoTo Başla
    End If
End Sub

Sub deneme()


MsgBox ("deneme başarılı")

End Sub
 
Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
Kod:
Option Explicit
Dim Zaman As Date
 
Sub control()
Başla:
Application.Wait Now + TimeValue("00:00:10")
If Sheets("CONTROL").Range("A1") = "STOP" Then
GoTo Başla
Else
    DoEvents
    Zaman = Time
     If Zaman >= Format(Sheets("control").Range("b2"), "hh:mm:ss") And Zaman <= Format(Sheets("control").Range("b3"), "hh:mm:ss") Then
        deneme
    
    Else
    GoTo Başla
        
        End If
    
    End If
End Sub

Sub deneme()


MsgBox ("deneme başarılı")

Application.OnTime Now + TimeValue("00:01:00"), "control"

End Sub

makromun buradaki örneğe göre 1 dakikada bir çalışması lazım, fakat belirtilen saat aralığında değilsek, sonsuz döngüye giriyor, bir wait eklemeye çalıştım ama oda izin vermedi araya girmeme. çalışan makroyu durdurabilecek nasıl bir yöntem vardır.
 
Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
Kod:
Option Explicit
Dim Zaman As Date
 
Sub control()

If Sheets("CONTROL").Range("A1") = "stop" Then Exit Sub

    DoEvents
    Zaman = Time
     If Zaman >= Format(Sheets("control").Range("b2"), "hh:mm:ss") And Zaman <= Format(Sheets("control").Range("b3"), "hh:mm:ss") Then
        deneme
    
    Else
tekrar:
   Application.OnTime Now + TimeValue("00:00:01"), "control"
   End If

End Sub

Sub deneme()


MsgBox ("deneme başarılı")

Application.OnTime Now + TimeValue("00:00:20"), "control"

End Sub

bu şekilde yapınca kilitlenme olayı halloldu ama yinede durmuyor makro
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Selamlar,
Kullandığınız yöntem excel için çok kullanışlı değil. Arka planda sürekli çalışan bir makro olacak. Yaptığınız işlemlere göre bir dizi karmaşaya sebep olacaktır. Döngü ile zaman hatırlatmayı tavsiye etmiyorum. Zorunlu bir özellikse dışveri al yöntemini kullanarak 1'er dakikalık aralıklarla ya da daha fazlasıyla sayfanın tetiklenmesini sağlayarak zaman kontrolünü sağlayabilirsiniz. Gerçi bu da zorlama bir yöntem ama en azından arka planda sürekli çalışan bir makronun varlığından sizi kurtarır. Fikir vermesi açısından vaktiyle yaptığım bir örneği ekliyorum.
 

Ekli dosyalar

Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
hocam teşekkürler ilgilendiğiniz için.
 
Üst