DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
Altın Üyelik Hakkında Bilgi
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
Ö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.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.
Lokal olarak denemiştim.Ben deneyemedim. Direkt ChatGPT çözümünü paylaştım.
Öncelikle ağa bağlı olmadan lokalde deneyebilir misiniz?
Mevcutta denediğim excelde birden çok fonsiyonda makro çalışmaktadır. fakat bu kodu çalıştıramadım.Denediğiniz dosyayı Makro içeren excel dosyası olarak kaydedip, excel ayarlarınızda da makrolarını etkinleştirdiniz mi?
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
MerhabaMerhaba.
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