Excel vba da açık olan excel kitabı belirlenen saatte kendisini kapatsın.

Katılım
17 Ocak 2022
Mesajlar
21
Excel Vers. ve Dili
excel 2019 türkçe
Merhaba, yerel ağda ortak kullandığımız bir excel kitabının belirlediğimiz saatte (örnek 17:45) kendisini otomatik kapatmasını sağlayabilecek vba kodları hakkında yardımcı olabilir misiniz?
Teşekkürler.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,884
Excel Vers. ve Dili
Microsoft 365 Tr-64
ChatGPT şöyle diyor.

C++:
Private Sub Workbook_Open()
    ' Kitap açıldığında otomatik kapatma zamanı ayarlanır
    Application.OnTime TimeValue("17:45:00"), "KapatDosya"
End Sub

Sub KapatDosya()
    Dim wb As Workbook
   
    Set wb = ThisWorkbook
   
    ' Eğer kayıt edilmemiş değişiklik varsa otomatik kaydedelim (opsiyonel)
    wb.Save
   
    ' Kitabı kapatalım
    wb.Close SaveChanges:=True
   
    ' Excel de kapatılsın isterseniz:
    ' Application.Quit
End Sub
🔹 Açıklamalar:
  • Workbook_Open olayına koyarsanız, dosya açıldığında Excel otomatik olarak 17:45 için kapanma planını yapar.
  • Application.OnTime sayesinde Excel arka planda belirlenen saati bekler.
  • wb.Save değişiklikleri kaydeder, isterseniz kaldırabilirsiniz.
  • Eğer Excel’i tamamen kapatmak isterseniz Application.Quit satırını açabilirsiniz.
👉 Eğer gün içinde her açıldığında o günün 17:45’ine göre kapanmasını istiyorsanız yukarıdaki kod yeterli.
👉 Ama her gün tekrar çalışsın derseniz, Workbook_Open içinde aynı OnTime ayarı zaten o gün için yeniden planlanır.


  • VBA kodları, dosya kimde açık ise onun bilgisayarında çalışır.
    Yani ortak bir klasörde duran Excel dosyası sadece açılmış olan bilgisayarda saat kontrolünü yapar.
    Eğer dosya birden fazla kullanıcıda aynı anda açıksa, her kullanıcının kendi bilgisayarındaki VBA tetiklenir.
    Sonuçta dosya 17:45’te tüm açık oturumlarda kapanmaya çalışacaktır.
  • Eğer bir kullanıcı dosyayı hiç açmazsa, onun bilgisayarında zaten kod çalışmaz.
  • Kaydetme davranışı:
    Kodda ThisWorkbook.Save var, yani kimin bilgisayarında açıksa kapanmadan önce kaydeder.
    Fakat aynı anda birden fazla kişi açtıysa, “Paylaşılan çalışma kitabı” (ya da ortak erişim) moduna göre kaydetme çakışmaları olabilir.

Özetle
  • Tek kişi açıyorsa → Sorunsuz çalışır.
  • Birden fazla kişi açıyorsa → Herkesin Excel’i kendi saatinde kapanmaya çalışır. Çakışma ihtimaline karşı özel kaydetme stratejisi (örneğin sadece ilk açan kişinin kaydetmesine izin verme) gerekebilir.


    Bilerek bu paylaşımı yapıyorum.
    Bu forum, herkese Excel ve VBA öğretmek için çaba sarfediyor.
    ChatGPT de bu amaçla faydalanabileceğiniz güzel bir kaynak. Aynı diğer forumlar, kitaplar, eğitici videolar vb. gibi.
 
Katılım
17 Ocak 2022
Mesajlar
21
Excel Vers. ve Dili
excel 2019 türkçe
ChatGPT şöyle diyor.

C++:
Private Sub Workbook_Open()
    ' Kitap açıldığında otomatik kapatma zamanı ayarlanır
    Application.OnTime TimeValue("17:45:00"), "KapatDosya"
End Sub

Sub KapatDosya()
    Dim wb As Workbook
  
    Set wb = ThisWorkbook
  
    ' Eğer kayıt edilmemiş değişiklik varsa otomatik kaydedelim (opsiyonel)
    wb.Save
  
    ' Kitabı kapatalım
    wb.Close SaveChanges:=True
  
    ' Excel de kapatılsın isterseniz:
    ' Application.Quit
End Sub
🔹 Açıklamalar:
  • Workbook_Open olayına koyarsanız, dosya açıldığında Excel otomatik olarak 17:45 için kapanma planını yapar.
  • Application.OnTime sayesinde Excel arka planda belirlenen saati bekler.
  • wb.Save değişiklikleri kaydeder, isterseniz kaldırabilirsiniz.
  • Eğer Excel’i tamamen kapatmak isterseniz Application.Quit satırını açabilirsiniz.
👉 Eğer gün içinde her açıldığında o günün 17:45’ine göre kapanmasını istiyorsanız yukarıdaki kod yeterli.
👉 Ama her gün tekrar çalışsın derseniz, Workbook_Open içinde aynı OnTime ayarı zaten o gün için yeniden planlanır.


  • VBA kodları, dosya kimde açık ise onun bilgisayarında çalışır.
    Yani ortak bir klasörde duran Excel dosyası sadece açılmış olan bilgisayarda saat kontrolünü yapar.
    Eğer dosya birden fazla kullanıcıda aynı anda açıksa, her kullanıcının kendi bilgisayarındaki VBA tetiklenir.
    Sonuçta dosya 17:45’te tüm açık oturumlarda kapanmaya çalışacaktır.
  • Eğer bir kullanıcı dosyayı hiç açmazsa, onun bilgisayarında zaten kod çalışmaz.
  • Kaydetme davranışı:
    Kodda ThisWorkbook.Save var, yani kimin bilgisayarında açıksa kapanmadan önce kaydeder.
    Fakat aynı anda birden fazla kişi açtıysa, “Paylaşılan çalışma kitabı” (ya da ortak erişim) moduna göre kaydetme çakışmaları olabilir.

Özetle
  • Tek kişi açıyorsa → Sorunsuz çalışır.
  • Birden fazla kişi açıyorsa → Herkesin Excel’i kendi saatinde kapanmaya çalışır. Çakışma ihtimaline karşı özel kaydetme stratejisi (örneğin sadece ilk açan kişinin kaydetmesine izin verme) gerekebilir.


    Bilerek bu paylaşımı yapıyorum.
    Bu forum, herkese Excel ve VBA öğretmek için çaba sarfediyor.
    ChatGPT de bu amaçla faydalanabileceğiniz güzel bir kaynak. Aynı diğer forumlar, kitaplar, eğitici videolar vb. gibi.
Öncelikle yardımınız için teşekkür ederim. Kodu gerekli yere yapıştırdıktan sonra belirlenen zaman geldiğinde makro çalıştırılamıyor uyarısı vermekte.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,884
Excel Vers. ve Dili
Microsoft 365 Tr-64
Ben deneyemedim. Direkt ChatGPT çözümünü paylaştım.
Öncelikle ağa bağlı olmadan lokalde deneyebilir misiniz?
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,884
Excel Vers. ve Dili
Microsoft 365 Tr-64
Denediğiniz dosyayı Makro içeren excel dosyası olarak kaydedip, excel ayarlarınızda da makrolarını etkinleştirdiniz mi?
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,543
Excel Vers. ve Dili
2019 Türkçe
Merhaba.

Aşağıdaki kodu BuÇalışmaKitabı adlı kod sayfasına kopyalayın.
Dosyayı açtığınızda kod tetiklenecek ve belirtilen saatte kaydedilip kapatılacaktır.

Kod:
Dim Zamanlayici As Double

Private Sub Workbook_Open()
    Zamanlayici = Date + TimeValue("17:45")
    Application.OnTime Zamanlayici, "BuÇalışmaKitabı.DosyayiKapat"
End Sub

Sub DosyayiKapat()
    If Workbooks.Count = 1 Then
        ThisWorkbook.Save
        Application.Quit
    Else
        ThisWorkbook.Close (True)
    End If
End Sub
 
Katılım
17 Ocak 2022
Mesajlar
21
Excel Vers. ve Dili
excel 2019 türkçe
Merhaba.

Aşağıdaki kodu BuÇalışmaKitabı adlı kod sayfasına kopyalayın.
Dosyayı açtığınızda kod tetiklenecek ve belirtilen saatte kaydedilip kapatılacaktır.

Kod:
Dim Zamanlayici As Double

Private Sub Workbook_Open()
    Zamanlayici = Date + TimeValue("17:45")
    Application.OnTime Zamanlayici, "BuÇalışmaKitabı.DosyayiKapat"
End Sub

Sub DosyayiKapat()
    If Workbooks.Count = 1 Then
        ThisWorkbook.Save
        Application.Quit
    Else
        ThisWorkbook.Close (True)
    End If
End Sub
Merhaba

Öncelikle izinli olduğum için geç cevap verebildim. Teşekkür ederim kod belirttiğimiz saatte exceli kapatıyor fakat o saat dakika geçmiş olmasına rağmen exceli actığımızda tekrar kendisini kapatmakta sürekli :( sanki bir döngüye girmiş gibi. Hata da vermiyor. acılıp kapanıyor.
 
Üst