TAKVİMLİ NOTLAR VE Excel ve VBA ile Sıfırdan Yapım Kılavuzu |
DOKÜMAN SÜRÜMÜ | HAZIRLANMA TARİHİ | NİTELİK |
1.0 | 21 Haziran 2026 | Adım Adım Uygulamalı Rehber |
Kaynak dosya: Tavimli Notlar_VBA.xlsm
Doküman Hakkında
Bu kılavuz, yüklenen “Tavimli Notlar_VBA.xlsm” çalışma kitabının OOXML yapısı, formülleri, biçimlendirmeleri, veri doğrulamaları, tanımlanmış adları ve VBA projesi doğrudan incelenerek hazırlanmıştır. Ekran görüntüleri, kaynak dosyadaki görünüm ve çalışma mantığını desteklemek amacıyla kullanılmıştır.
Doğruluk ilkesi: Formül, hücre adresi, tablo adı ve VBA bileşenleri kaynak dosyadan alınmıştır. Kaynak dosyada bulunmayan veya eksik olan noktalar “teknik not” ya da “isteğe bağlı iyileştirme” olarak açıkça ayrılmıştır. |
Bilgi | Kaynak dosyada tespit edilen değer |
|---|---|
Dosya türü | Excel Makro Etkin Çalışma Kitabı (.xlsm) |
Çalışma sayfaları | Takvim, Notlar |
Excel tablosu | Tablo1 — Notlar!D1:E55 |
Tanımlanmış adlar | Tarih, Not, Notlar |
Standart modül | modEtkinlikHatirlatici |
UserForm | frmEtkinlikHatirlatici |
Çalışma kitabı modülü | BuÇalışmaKitabı (ThisWorkbook karşılığı) |
Tarih aralığı | Bugün dahil, önümüzdeki 7 gün dahil — toplam 8 tarih |
İçindekiler
3. Gerekli Excel Sürümü ve Güvenlik Ayarları 1
3.1 Önerilen Excel Sürümleri 1
3.2 Makroların Etkinleştirilmesi 1
4. Yeni Çalışma Kitabının Hazırlanması 1
5. Notlar Sayfasının Hazırlanması 1
5.2 Örnek Kayıtların Girilmesi 1
5.3 Aralığı Excel Tablosuna Dönüştürme 1
6. Takvim Sayfasının Tasarımı 1
6.3 Satır Yükseklikleri ve Sütun Genişlikleri 1
7. Ay Seçme Listesinin Hazırlanması 1
8. Yıl Seçme Listesinin Hazırlanması 1
9. Takvim Tarihlerinin Otomatik Oluşturulması 1
9.1 İlk Haftanın Başlangıcını Bulma 1
9.3 Tarihlerin Yalnızca Gün Numarası Olarak Gösterilmesi 1
10. Tarihe Bağlı Notların Takvimde Gösterilmesi 1
10.1 Kaynak Dosyadaki Formül Yapısı 1
10.2 Son Haftayı Tamamlamak İçin Önerilen Formül 1
10.3 Aynı Tarihte Birden Fazla Not 1
11. Koşullu Biçimlendirme Kuralları 1
11.1 Seçili Ay Dışındaki Günleri Soluklaştırma 1
13. Standart Modül: modEtkinlikHatirlatici 1
13.1 Sabitler ve Genel Değişkenler 1
13.3 Tam Standart Modül Kodu 1
14. UserForm: frmEtkinlikHatirlatici 1
14.1 Boş Formun Oluşturulması 1
14.2 Form Boyutları ve Renkleri 1
14.3 Çalışma Zamanında Oluşturulan Kontroller 1
14.4 Renk Değiştiren Kalan Süre Kutusu 1
15. BuÇalışmaKitabı Olay Kodları 1
15.3 Tam Çalışma Kitabı Kodu 1
16.2 VBA Formunu Manuel Test Etme 1
17.1 Etkinlik Listesinin Sıralaması 1
18.1 VBA Hata Mesajlarının Okunması 1
19. Teknik Sınırlamalar ve İyileştirme Notları 1
Ek C — Hızlı Kurulum Kontrol Listesi 1
Word kullanımı: Bu alan gerçek bir Word içindekiler alanıdır. Sayfa numaralarını ve alt başlıkları yenilemek için Ctrl+A ardından F9 tuşlarına basın ve “Tüm tabloyu güncelleştir” seçeneğini kullanın. |
1. Uygulama Ne İşe Yarar?
Takvimli Notlar ve Etkinlik Hatırlatıcısı; bir ayın günlerini otomatik oluşturan, belirli tarihlere girilen açıklamaları takvim üzerinde gösteren ve yaklaşan kayıtları VBA UserForm ile kullanıcıya bildiren bir Excel çözümüdür.
- Ay ve yıl değiştiğinde takvim tarihleri otomatik yeniden hesaplanır.
- Notlar sayfasına girilen tarih–açıklama kayıtları ilgili günün altındaki alanda gösterilir.
- Seçilen aya ait olmayan günler soluk renkte görünür.
- Cumartesi ve pazar sütunları açık mavi arka planla ayrıştırılır.
- Dosya açıldığında bugün ve önümüzdeki 7 gün içindeki etkinlikler kontrol edilir.
- Geçmiş tarihli kayıtlar uyarı ekranında gösterilmez.
- Kayıtlar en yakın tarihten en uzak tarihe doğru sıralanır.
- UserForm modeless açıldığı için kullanıcı form açıkken Excel üzerinde çalışmaya devam edebilir.
1.1 Çözdüğü Problem
Tarihlerin ayrı bir listede tutulması, yaklaşan işlerin gözden kaçmasına ve aylık görünüm ile etkinlik listesinin birbirinden kopuk kalmasına yol açar. Bu çalışma, liste tabanlı kayıtları görsel bir takvim ve otomatik uyarı penceresiyle tek dosyada birleştirir.
1.2 Bileşenlerin Görevi
Bileşen | Görev |
|---|---|
Takvim sayfası | Ay/yıl seçimi, günlerin üretimi, hafta sonu ayrımı ve tarihe bağlı notların gösterimi. |
Notlar sayfası | Tarih ve etkinlik açıklamalarının Excel tablosunda saklanması. |
modEtkinlikHatirlatici | Yaklaşan kayıtların okunması, filtrelenmesi, sıralanması ve forma aktarılması. |
frmEtkinlikHatirlatici | En yakın etkinlik kartı, etkinlik listesi, yenileme ve kapatma işlemleri. |
BuÇalışmaKitabı | Dosya açılışında ve Notlar sayfasındaki değişikliklerde kontrol prosedürünü tetikleme. |
1.3 Tarih Aralığının Yorumu
Kodda kalan gün sayısı 0 ile 7 arasında kontrol edilir. Bu nedenle “bugün ve önümüzdeki 7 gün” ifadesi bugün dahil olmak üzere toplam 8 takvim tarihini kapsar. Örneğin bugün 21.06.2026 ise 21.06.2026–28.06.2026 aralığındaki kayıtlar gösterilir.
2. Teknik İnceleme Özeti
Öğe | Tespit |
|---|---|
Takvim sayfası boyutu | C1:X13 |
Takvim görünür ana alanı | C1:K13 |
Ay yardımcı listesi | M1:X1 |
Takvim haftası sayısı | 5 haftalık blok: tarih satırları 4, 6, 8, 10 ve 12 |
Not satırları | 5, 7, 9, 11 ve 13 |
Birleştirilmiş alanlar | C1:D3, C4:D4, C5:D13 ve E1:K3 içindeki 7 ayrı gün başlığı |
Veri doğrulama | 2 kural: ay listesi ve yıl listesi |
Koşullu biçimlendirme | 1 kural: seçili aya ait olmayan tarihleri soluklaştırma |
Dinamik tarih formülleri | 5 adet SIRALI dizi formülü |
Not formülleri | Kaynak dosyada E5:K11 aralığında 28 adet FİLTRE formülü |
Son not satırı | E13:K13 biçimlendirilmiş, ancak kaynak dosyada FİLTRE formülü yok |
Notlar sayfası boyutu | D1:E55 |
Kayıt sayısı | 54 veri satırı (başlık hariç) |
Form kontrolleri | 19 kontrol çalışma zamanında VBA ile oluşturuluyor |
Şekil 1 — Kaynak çalışma kitabındaki Takvim sayfası ve E4 dinamik dizi formülü.
Kaynak dosya notu: Dikey başlık hücresindeki metin “AYLIK PLANYAYICI” olarak kayıtlıdır. Rehberde kullanıcıya gösterilecek doğru yazım “AYLIK PLANLAYICI” olarak önerilmiştir; bu bir yazım düzeltmesidir, kod mantığını etkilemez. |
3. Gerekli Excel Sürümü ve Güvenlik Ayarları
3.1 Önerilen Excel Sürümleri
Çalışma kitabında SIRALI ve FİLTRE gibi dinamik dizi fonksiyonları kullanıldığı için Microsoft 365 veya Excel 2021 ve üzeri önerilir. Daha eski Excel sürümlerinde bu fonksiyonlar bulunmayabilir ve hücrelerde #AD? ya da benzeri uyumluluk hataları oluşabilir.
Özellik | Gereksinim |
|---|---|
SIRALI | Microsoft 365 / Excel 2021 ve daha yeni sürümler |
FİLTRE | Microsoft 365 / Excel 2021 ve daha yeni sürümler |
VBA UserForm | Windows masaüstü Excel önerilir |
Makro açılış olayı | Dosyanın .xlsm biçiminde olması ve makrolara izin verilmesi gerekir |
3.2 Makroların Etkinleştirilmesi
1. Dosyayı açın ve üst kısımda güvenlik uyarısı görünürse “İçeriği Etkinleştir” seçeneğini kullanın.
2. Kalıcı ayarı kontrol etmek için Dosya → Seçenekler → Güven Merkezi → Güven Merkezi Ayarları → Makro Ayarları yolunu izleyin.
3. Güvenlik açısından “VBA makrolarını bildirimle devre dışı bırak” seçeneği önerilir. “Tüm makroları etkinleştir” seçeneğini genel kullanım için tercih etmeyin.
4. Dosyayı yalnızca güvenilir bir kaynaktan aldığınızda makroları etkinleştirin.
Önemli: Dosya .xlsx olarak kaydedilirse VBA projesi silinir. Bu çalışma mutlaka Excel Makro Etkin Çalışma Kitabı (*.xlsm) biçiminde saklanmalıdır. |
4. Yeni Çalışma Kitabının Hazırlanması
1. Excel’i açın ve Boş çalışma kitabı oluşturun.
2. Dosya → Farklı Kaydet → Dosya Türü → Excel Makro Etkin Çalışma Kitabı (*.xlsm) seçimini yapın.
3. İlk sayfanın adını Takvim, ikinci sayfanın adını Notlar olarak değiştirin.
4. Geliştirici sekmesi görünmüyorsa Dosya → Seçenekler → Şeridi Özelleştir bölümünden Geliştirici kutusunu işaretleyin.
5. Alt+F11 ile Visual Basic Düzenleyicisini açın.
6. Proje Gezgini görünmüyorsa Ctrl+R, Özellikler penceresi görünmüyorsa F4 tuşunu kullanın.
4.1 Sayfa Kod Adları
Kaynak dosyada Takvim sayfasının kod adı “Sayfa1”, Notlar sayfasının kod adı “Sayfa2”, çalışma kitabı modülünün kod adı ise “BuÇalışmaKitabı”dır. VBA kodu sayfa adını sabit üzerinden “Notlar” olarak kullandığı için kullanıcı görünen sayfa adını değiştirmemelidir.
Kontrol listesi: Dosya türü .xlsm, sayfa adları Takvim ve Notlar, Geliştirici sekmesi açık, makro güvenliği bildirimli ve VBA Düzenleyicisi erişilebilir olmalıdır. |
5. Notlar Sayfasının Hazırlanması
5.1 Hücre Yerleşimi
Alan | Hücre/Aralık | İçerik | Biçim |
|---|---|---|---|
Tarih başlığı | D1 | Tarih | Tablo başlığı |
Not başlığı | E1 | Not | Tablo başlığı |
Tarih kayıtları | D2:D55 | Excel tarih değerleri | Kısa tarih biçimi |
Açıklamalar | E2:E55 | Etkinlik/not metni | Metin |
Tablo aralığı | D1:E55 | Başlık + 54 veri satırı | TableStyleMedium2 |
Kaynak dosyada Notlar sayfasında kılavuz çizgileri kapalıdır. D sütunu genişliği 12, E sütunu genişliği 39 ve varsayılan satır yüksekliği 14,5’tir.
5.2 Örnek Kayıtların Girilmesi
Tarih | Not |
|---|---|
07.06.2026 | X Doğum Günü |
15.06.2026 | Abonelik iptali |
22.06.2026 | Ekip toplantısı yapılacak |
24.06.2026 | Kamera alınacak |
28.06.2026 | Ankaya toplantı |
Tarih hücrelerine metin değil, Excel’in gerçek tarih değerlerini girin. Hücre biçimini Giriş → Sayı → Kısa Tarih olarak ayarlayın. VBA kodu IsDate ve DateValue kontrollerini kullandığı için geçersiz metinler atlanır.
5.3 Aralığı Excel Tablosuna Dönüştürme
1. D1:E55 aralığını seçin.
2. Ekle → Tablo komutunu kullanın veya Ctrl+T tuşlarına basın.
3. “Tablom başlık içeriyor” kutusunu işaretleyin.
4. Tablo Tasarımı → Tablo Adı alanında kaynak dosyadaki gerçek adı kullanın: Tablo1.
5. Tablo stili olarak kaynak dosyada TableStyleMedium2 uygulanmıştır.
5.4 Tanımlanmış Adlar
Formüllerde tablo yapılandırılmış başvurusu yerine çalışma kitabı kapsamındaki tanımlanmış adlar kullanılır. Formüller → Ad Yöneticisi → Yeni yoluyla aşağıdaki üç adı oluşturun.
Ad | Başvurduğu Yer | Kullanım |
|---|---|---|
Tarih | =Notlar!$D:$D | FİLTRE koşulunda tarih sütunu |
Not | =Notlar!$E:$E | FİLTRE sonucunda döndürülecek açıklama sütunu |
Notlar | =Tablo1[#All] | Tablonun tüm alanını temsil eden ek ad |
6. Takvim Sayfasının Tasarımı
6.1 Ana Yerleşim
Alan | Hücre/Aralık | İçerik | Kaynak biçimlendirme |
|---|---|---|---|
Ay seçimi | C1:D3 (birleşik) | Haz gibi ay kısaltması | Koyu lacivert dolgu; 24 punto kalın, açık yeşil yazı; ortalı |
Yıl seçimi | C4:D4 (birleşik) | 2026 | Ay alanıyla aynı stil |
Dikey başlık | C5:D13 (birleşik) | AYLIK PLANLAYICI | Koyu lacivert; 28 punto beyaz kalın; dikey yön |
Gün başlıkları | E1:K3 | Pzt–Paz | Koyu lacivert; 16 punto beyaz kalın; ortalı |
Hafta içi tarihleri | E4:I12 çift satırlar | Gün numarası | Beyaz; 14 punto kalın; d biçimi |
Hafta sonu tarihleri | J4:K12 çift satırlar | Gün numarası | Açık mavi; 14 punto kalın |
Hafta içi notları | E5:I13 tek satırlar | Etkinlik metni | Açık gri; 9 punto kırmızı kalın; kaydırmalı |
Hafta sonu notları | J5:K13 tek satırlar | Etkinlik metni | Açık mavi; 9 punto kırmızı kalın; kaydırmalı |
Ay listesi | M1:X1 | Oca–Ara | Yardımcı liste |
6.2 Birleştirilmiş Hücreler
Kaynak dosyada toplam 10 birleştirilmiş alan vardır: C1:D3, C4:D4, C5:D13 ile E1:E3, F1:F3, G1:G3, H1:H3, I1:I3, J1:J3 ve K1:K3.
6.3 Satır Yükseklikleri ve Sütun Genişlikleri
Satır/Sütun | Değer |
|---|---|
1–3. satırlar | 9,75 |
4, 6, 8, 10, 12. satırlar | 30,75 |
5, 7, 9, 11, 13. satırlar | 50,25 |
D sütunu | 6,54296875 |
E:K sütunları | 14 |
C sütunu | Özel genişlik tanımlanmamış; Excel varsayılanı kullanılır |
M:X sütunları | Özel genişlik tanımlanmamış; yardımcı liste görünür durumdadır |
6.4 Renk Paleti
Kullanım | RGB / HEX | Açıklama |
|---|---|---|
Ana lacivert | RGB(0,32,96) / #002060 | Ay/yıl alanı, gün başlıkları, dikey planlayıcı |
Hafta sonu açık mavisi | RGB(217,241,255) / #D9F1FF | Cumartesi–pazar tarih ve not alanları |
Not satırı açık grisi | Yaklaşık RGB(242,242,242) / #F2F2F2 | Tema beyazının %5 koyulaştırılmış hali |
Etkinlik yazısı | RGB(255,0,0) / #FF0000 | Takvim notları |
Ay/yıl yazısı | Tema Accent 6, Tint +0,40; yaklaşık #95CA82 | Kaynak tema tabanlı açık yeşil |
Soluk tarih yazısı | Yaklaşık #F2F2F2 | Koşullu biçimlendirme ile diğer ay günleri |
7. Ay Seçme Listesinin Hazırlanması
Ay yardımcı listesi Takvim sayfasında M1:X1 aralığında tutulur. Kaynak dosyada bu sütunlar gizli değildir; ekranın sağında yardımcı alan olarak yer alır.
Hücre | Değer |
|---|---|
M1 | Oca |
N1 | Şub |
O1 | Mar |
P1 | Nis |
Q1 | May |
R1 | Haz |
S1 | Tem |
T1 | Ağu |
U1 | Eyl |
V1 | Eki |
W1 | Kas |
X1 | Ara |
1. C1:D3 birleşik alanını seçin.
2. Veri → Veri Doğrulama komutunu açın.
3. İzin Ver alanında Liste seçin.
4. Kaynak alanına =$M$1:$X$1 yazın.
5. Boşluğu yoksay ve Hücre içi açılır liste seçeneklerini açık bırakın.
6. Tamam düğmesine basın.
Ay listesi veri doğrulama kaynağı
=$M$1:$X$1
8. Yıl Seçme Listesinin Hazırlanması
Yıl seçimi C4:D4 birleşik alanındadır. Kaynak dosyada yıllar hücre aralığından değil, veri doğrulama kuralının içine doğrudan yazılmıştır.
Kaynak dosyada saklanan liste
2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036
1. C4:D4 birleşik alanını seçin.
2. Veri → Veri Doğrulama → Liste seçimini yapın.
3. Kaynak alanına 2026–2036 yıllarını yazın.
4. Windows bölgesel ayarınız liste ayırıcısı olarak noktalı virgül kullanıyorsa değerleri noktalı virgülle ayırın; dosyanın OOXML kaydında virgül kullanılmıştır.
5. Tamam düğmesine basın.
9. Takvim Tarihlerinin Otomatik Oluşturulması
9.1 İlk Haftanın Başlangıcını Bulma
E4 hücresi
=SIRALI(1;7;(1&C1&C4)-HAFTANINGÜNÜ((1&C1&C4);2)+1)
Formül 1 satır ve 7 sütundan oluşan bir dizi üretir. “1&C1&C4” ifadesi seçili ayın ilk gününü oluşturur; örneğin C1=Haz ve C4=2026 iken “1Haz2026” elde edilir. HAFTANINGÜNÜ(…;2) pazartesiyi 1 kabul eder. Böylece ayın ilk gününü içeren haftanın pazartesi tarihi hesaplanır ve SIRALI fonksiyonu pazartesiden pazara 7 tarih üretir.
9.2 Sonraki Haftalar
E6 hücresi
=SIRALI(1;7;K4+1)
İlk haftanın pazar gününden sonraki pazartesiyle başlar.
E8 hücresi
=SIRALI(1;7;K6+1)
İkinci haftanın pazarından sonraki pazartesiyle başlar.
E10 hücresi
=SIRALI(1;7;K8+1)
Üçüncü haftanın pazarından sonraki pazartesiyle başlar.
E12 hücresi
=SIRALI(1;7;K10+1)
Dördüncü haftanın pazarından sonraki pazartesiyle başlar.
9.3 Tarihlerin Yalnızca Gün Numarası Olarak Gösterilmesi
E4:K4, E6:K6, E8:K8, E10:K10 ve E12:K12 aralıklarına özel sayı biçimi olarak d uygulanmıştır. Hücrelerin gerçek değeri tam tarihtir; ekranda yalnızca 1, 2, 3 gibi gün numaraları görünür.
Dinamik dizi davranışı: Formülü yalnızca E4, E6, E8, E10 ve E12 başlangıç hücrelerine yazın. Sağdaki hücreleri elle doldurmayın; SIRALI sonucu K sütununa kadar otomatik taşar. |
10. Tarihe Bağlı Notların Takvimde Gösterilmesi
10.1 Kaynak Dosyadaki Formül Yapısı
E5 hücresi
=FİLTRE(Not;Tarih=E4;””)
Formül, Tarih tanımlanmış adındaki değerlerden E4 tarihine eşit olan satırları bulur ve aynı satırlardaki Not değerlerini döndürür. Eşleşme yoksa boş metin gösterilir.
1. E5 hücresine formülü yazın.
2. E5 hücresini sağa doğru K5’e kadar kopyalayın. Göreli tarih başvuruları F4, G4 … K4 olarak değişir.
3. E5:K5 aralığını E7:K7, E9:K9 ve E11:K11 satırlarına kopyalayın.
4. Her not satırı bir üstteki tarih satırını referans alır: 5→4, 7→6, 9→8, 11→10.
Not satırı | Tarih satırı | E sütunundaki formül |
|---|---|---|
E5:K5 | E4:K4 | =FİLTRE(Not;Tarih=E4;””) |
E7:K7 | E6:K6 | =FİLTRE(Not;Tarih=E6;””) |
E9:K9 | E8:K8 | =FİLTRE(Not;Tarih=E8;””) |
E11:K11 | E10:K10 | =FİLTRE(Not;Tarih=E10;””) |
E13:K13 | E12:K12 | Kaynak dosyada formül bulunmuyor |
Şekil 2 — FİLTRE formülünün takvimde not alanına girilmesi.
Kaynak dosyada tespit edilen eksiklik: E13:K13 aralığı biçimlendirilmiş olmasına rağmen bu hücrelerde FİLTRE formülü yoktur. Bu nedenle beşinci haftanın alt satırında notlar görünmez. |
10.2 Son Haftayı Tamamlamak İçin Önerilen Formül
E13 hücresi — kaynak dosyayı tamamlayan öneri
=FİLTRE(Not;Tarih=E12;””)
E13’e bu formülü yazıp K13’e kadar kopyalarsanız beşinci haftadaki etkinlikler de gösterilir. Bu formül kaynak dosyada mevcut değildir; çalışmanın bütünlüğü için önerilen tamamlamadır.
10.3 Aynı Tarihte Birden Fazla Not
FİLTRE aynı tarih için birden fazla sonuç bulursa sonuçları dikey taşır. Alt hücrelerde tarih veya başka formül bulunduğunda #TAŞMA! hatası oluşabilir. Kaynak dosyanın mevcut yapısında her tarih için tek not kullanmak en güvenli yöntemdir. Çoklu not ihtiyacı varsa METİNBİRLEŞTİR tabanlı alternatif ayrı bir geliştirme olarak ele alınmalıdır.
11. Koşullu Biçimlendirme Kuralları
11.1 Seçili Ay Dışındaki Günleri Soluklaştırma
Kaynak dosyada E4:K13 aralığına tek bir formül tabanlı koşullu biçimlendirme kuralı uygulanmıştır.
Koşullu biçimlendirme formülü
=AY(E4)<>AY($C$1&$C$4)
1. E4:K13 aralığını seçin.
2. Giriş → Koşullu Biçimlendirme → Yeni Kural yolunu izleyin.
3. “Biçimlendirilecek hücreleri belirlemek için formül kullan” seçeneğini seçin.
4. Formül alanına =AY(E4)<>AY($C$1&$C$4) yazın.
5. Biçim → Yazı Tipi → Renk bölümünde çok açık gri/beyaz tonu seçin. Kaynak dosyada tema beyazı %5 koyulaştırılmış yaklaşık #F2F2F2 kullanılır.
6. Uygulama alanını =$E$4:$K$13 olarak ayarlayın.
Şekil 3 — Seçili aya ait olmayan tarihleri soluklaştıran koşullu biçimlendirme kuralı.
Kural göreli başvuru olan E4 üzerinden tüm aralığa uygulanır. Hücrenin ayı, C1 ve C4 ile oluşturulan seçili ayın ay numarasından farklıysa yazı soluklaşır.
12. VBA Yapısının Kurulması
12.1 Bileşenler
Bileşen | Oluşturma Yolu | Ad |
|---|---|---|
Standart modül | VBA Düzenleyicisi → Ekle → Modül | modEtkinlikHatirlatici |
UserForm | VBA Düzenleyicisi → Ekle → UserForm | frmEtkinlikHatirlatici |
Çalışma kitabı modülü | Microsoft Excel Nesneleri → BuÇalışmaKitabı | BuÇalışmaKitabı |
UserForm üzerine Tasarım görünümünde Label, ListBox veya CommandButton eklenmez. Kaynak dosyada tüm kontroller çalışma zamanında Me.Controls.Add ile oluşturulur. Kullanıcının yapacağı işlem yalnızca boş UserForm oluşturmak, adını ayarlamak ve kodu formun kod penceresine yapıştırmaktır.
12.2 Veri Akışı
Aşama | İşlem |
|---|---|
1 | Workbook_Open veya SheetChange olayı YaklasanEtkinlikleriKontrolEt prosedürünü çağırır. |
2 | EtkinlikVerileriniHazirla Notlar sayfasının D:E sütunlarını tarar. |
3 | Bugün ile +7 gün arasındaki kayıtlar üç sütunlu bir diziye alınır. |
4 | EtkinlikleriSirala diziyi tarihe göre artan şekilde sıralar. |
5 | UserForm açılır veya açıksa VerileriYenile ile güncellenir. |
6 | En yakın kayıt özet kartına, tüm kayıtlar ListBox’a yazılır. |
13. Standart Modül: modEtkinlikHatirlatici
13.1 Sabitler ve Genel Değişkenler
Sabit/Değişken | Değer | Görev |
|---|---|---|
ETKINLIK_SAYFA | Notlar | Verilerin okunacağı sayfa |
ETKINLIK_TARIH_SUTUNU | 4 | D sütunu |
ETKINLIK_NOT_SUTUNU | 5 | E sütunu |
ETKINLIK_ILK_SATIR | 2 | Başlık sonrası ilk veri satırı |
ETKINLIK_UYARI_GUNU | 7 | İleriye dönük kontrol süresi |
gEtkinlikler | Variant dizi | Formda gösterilecek kayıtlar |
gEtkinlikSayisi | Long | Yaklaşan kayıt sayısı |
13.2 Prosedürlerin Görevi
Prosedür | Görev |
|---|---|
YaklasanEtkinlikleriKontrolEt | Verileri hazırlar, kayıt yoksa formu kapatır veya bilgi verir, kayıt varsa formu modeless açar/günceller. |
EtkinlikVerileriniHazirla | D:E sütunlarını iki tur tarar; uygun kayıt sayısını ve veri dizisini oluşturur. |
TarihDegeriniAl | Hata, boşluk ve geçersiz tarihleri güvenli biçimde eler. |
EtkinlikleriSirala | Kayıtları en yakın tarihten en uzağa sıralar. |
KalanGunMetni | 0→Bugün, 1→Yarın, diğer→n gün sonra metnini döndürür. |
FormYukluMu | UserForm’un açık/yüklü olup olmadığını kontrol eder. |
EtkinlikHatirlaticisiniTestEt | Elle test için ana kontrol prosedürünü çağırır. |
13.3 Tam Standart Modül Kodu
Ekle → Modül ile yeni standart modül oluşturun, Özellikler penceresindeki (Name) değerini modEtkinlikHatirlatici yapın ve aşağıdaki kodu yapıştırın.
Option Explicit
‘==============================================================================
‘ ETKİNLİK HATIRLATICISI – STANDART MODÜL
‘==============================================================================
Public Const ETKINLIK_SAYFA As String = “Notlar”
Public Const ETKINLIK_TARIH_SUTUNU As Long = 4 ‘ D sütunu
Public Const ETKINLIK_NOT_SUTUNU As Long = 5 ‘ E sütunu
Public Const ETKINLIK_ILK_SATIR As Long = 2
Public Const ETKINLIK_UYARI_GUNU As Long = 7
Public gEtkinlikler As Variant
Public gEtkinlikSayisi As Long
‘==============================================================================
‘ ANA KONTROL
‘==============================================================================
Public Sub YaklasanEtkinlikleriKontrolEt( _
Optional ByVal kayitYoksaBilgiVer As Boolean = False)
On Error GoTo Hata
EtkinlikVerileriniHazirla
If gEtkinlikSayisi = 0 Then
On Error Resume Next
If FormYukluMu(“frmEtkinlikHatirlatici”) Then
Unload frmEtkinlikHatirlatici
End If
On Error GoTo Hata
If kayitYoksaBilgiVer Then
MsgBox “Bugün ve önümüzdeki ” & _
CStr(ETKINLIK_UYARI_GUNU) & _
” gün içinde yaklaşan etkinlik bulunamadı.”, _
vbInformation, _
“Yaklaşan Etkinlikler”
End If
Exit Sub
End If
If FormYukluMu(“frmEtkinlikHatirlatici”) Then
frmEtkinlikHatirlatici.VerileriYenile
If frmEtkinlikHatirlatici.Visible = False Then
frmEtkinlikHatirlatici.Show vbModeless
End If
Else
frmEtkinlikHatirlatici.Show vbModeless
End If
Exit Sub
Hata:
MsgBox “Etkinlik hatırlatıcısı çalıştırılamadı.” & _
vbCrLf & vbCrLf & _
“Hata No: ” & Err.Number & vbCrLf & _
“Açıklama: ” & Err.Description, _
vbExclamation, _
“Etkinlik Hatırlatıcısı”
End Sub
‘==============================================================================
‘ D VE E SÜTUNLARINDAKİ ETKİNLİKLERİ HAZIRLA
‘==============================================================================
Public Sub EtkinlikVerileriniHazirla()
Dim ws As Worksheet
Dim sonSatir As Long
Dim satir As Long
Dim sira As Long
Dim etkinlikTarihi As Date
Dim kalanGun As Long
Dim notMetni As String
Dim sonuc() As Variant
On Error GoTo Hata
gEtkinlikSayisi = 0
gEtkinlikler = Empty
Set ws = ThisWorkbook.Worksheets(ETKINLIK_SAYFA)
sonSatir = ws.Cells( _
ws.Rows.Count, _
ETKINLIK_TARIH_SUTUNU).End(xlUp).Row
If sonSatir < ETKINLIK_ILK_SATIR Then Exit Sub
‘————————————————————————–
‘ Birinci tarama: Yaklaşan etkinlik sayısını bulur.
‘————————————————————————–
For satir = ETKINLIK_ILK_SATIR To sonSatir
If TarihDegeriniAl( _
ws.Cells(satir, ETKINLIK_TARIH_SUTUNU).Value, _
etkinlikTarihi) Then
kalanGun = DateDiff( _
“d”, _
Date, _
etkinlikTarihi)
If kalanGun >= 0 And _
kalanGun <= ETKINLIK_UYARI_GUNU Then
gEtkinlikSayisi = gEtkinlikSayisi + 1
End If
End If
Next satir
If gEtkinlikSayisi = 0 Then Exit Sub
ReDim sonuc(1 To gEtkinlikSayisi, 1 To 3)
‘————————————————————————–
‘ İkinci tarama: Verileri diziye aktarır.
‘————————————————————————–
sira = 0
For satir = ETKINLIK_ILK_SATIR To sonSatir
If TarihDegeriniAl( _
ws.Cells(satir, ETKINLIK_TARIH_SUTUNU).Value, _
etkinlikTarihi) Then
kalanGun = DateDiff( _
“d”, _
Date, _
etkinlikTarihi)
If kalanGun >= 0 And _
kalanGun <= ETKINLIK_UYARI_GUNU Then
sira = sira + 1
If IsError(ws.Cells( _
satir, _
ETKINLIK_NOT_SUTUNU).Value) Then
notMetni = “Açıklama okunamadı”
Else
notMetni = Trim$(CStr(ws.Cells( _
satir, _
ETKINLIK_NOT_SUTUNU).Value))
If Len(notMetni) = 0 Then
notMetni = “Açıklama girilmemiş”
End If
End If
sonuc(sira, 1) = etkinlikTarihi
sonuc(sira, 2) = notMetni
sonuc(sira, 3) = kalanGun
End If
End If
Next satir
EtkinlikleriSirala sonuc
gEtkinlikler = sonuc
Exit Sub
Hata:
gEtkinlikSayisi = 0
gEtkinlikler = Empty
Err.Raise Err.Number, _
“EtkinlikVerileriniHazirla”, _
Err.Description
End Sub
‘==============================================================================
‘ HÜCREDEKİ TARİHİ GÜVENLİ ŞEKİLDE AL
‘==============================================================================
Private Function TarihDegeriniAl( _
ByVal hucreDegeri As Variant, _
ByRef sonucTarih As Date) As Boolean
On Error GoTo GecersizTarih
TarihDegeriniAl = False
If IsError(hucreDegeri) Then Exit Function
If IsEmpty(hucreDegeri) Then Exit Function
If Len(Trim$(CStr(hucreDegeri))) = 0 Then Exit Function
If Not IsDate(hucreDegeri) Then Exit Function
sonucTarih = DateValue(CDate(hucreDegeri))
TarihDegeriniAl = True
Exit Function
GecersizTarih:
TarihDegeriniAl = False
End Function
‘==============================================================================
‘ ETKİNLİKLERİ EN YAKIN TARİHTEN EN UZAĞA SIRALA
‘==============================================================================
Private Sub EtkinlikleriSirala(ByRef veri As Variant)
Dim i As Long
Dim j As Long
Dim kolon As Long
Dim gecici As Variant
If Not IsArray(veri) Then Exit Sub
For i = 1 To UBound(veri, 1) – 1
For j = i + 1 To UBound(veri, 1)
If CDate(veri(j, 1)) < CDate(veri(i, 1)) Then
For kolon = 1 To 3
gecici = veri(i, kolon)
veri(i, kolon) = veri(j, kolon)
veri(j, kolon) = gecici
Next kolon
End If
Next j
Next i
End Sub
‘==============================================================================
‘ KALAN GÜN METNİ
‘==============================================================================
Public Function KalanGunMetni(ByVal kalanGun As Long) As String
Select Case kalanGun
Case 0
KalanGunMetni = “Bugün”
Case 1
KalanGunMetni = “Yarın”
Case Else
KalanGunMetni = CStr(kalanGun) & ” gün sonra”
End Select
End Function
‘==============================================================================
‘ FORM YÜKLÜ MÜ?
‘==============================================================================
Private Function FormYukluMu(ByVal formAdi As String) As Boolean
Dim frm As Object
FormYukluMu = False
For Each frm In VBA.UserForms
If StrComp(TypeName(frm), formAdi, vbTextCompare) = 0 Then
FormYukluMu = True
Exit Function
End If
Next frm
End Function
‘==============================================================================
‘ MANUEL TEST
‘==============================================================================
Public Sub EtkinlikHatirlaticisiniTestEt()
YaklasanEtkinlikleriKontrolEt True
End Sub
14. UserForm: frmEtkinlikHatirlatici
14.1 Boş Formun Oluşturulması
1. VBA Düzenleyicisinde Ekle → UserForm seçin.
2. Özellikler penceresinde (Name) değerini frmEtkinlikHatirlatici olarak değiştirin.
3. Formun üzerine herhangi bir kontrol yerleştirmeyin.
4. F7 ile kod penceresini açın ve mevcut kodu temizleyerek tam UserForm kodunu yapıştırın.
14.2 Form Boyutları ve Renkleri
Öğe | Değer |
|---|---|
Form başlığı | Yaklaşan Etkinlikler |
Genişlik / Yükseklik | 700 / 525 point |
Form arka planı | RGB(244,247,251) / #F4F7FB |
Üst alan | RGB(31,52,89) / #1F3459 |
Sayaç ve yenile butonu | RGB(64,112,160) / #4070A0 |
Vurgu turuncusu | RGB(242,153,74) / #F2994A |
Durum yeşili | RGB(47,158,107) / #2F9E6B |
Acil durum kırmızısı | RGB(214,69,65) / #D64541 |
Sütun başlığı mavisi | RGB(47,87,135) / #2F5787 |
Yazı tipi | Segoe UI |
14.3 Çalışma Zamanında Oluşturulan Kontroller
Kontrol grubu | İçerik |
|---|---|
Üst başlık | Arka plan, ana başlık, alt başlık ve etkinlik sayacı |
En yakın etkinlik kartı | Tarih, açıklama ve kalan süre etiketi |
Liste başlığı | Lacivert şerit, turuncu vurgu ve bölüm başlığı |
Sütun başlıkları | TARİH, KALAN SÜRE, ETKİNLİK AÇIKLAMASI |
Liste | 3 sütunlu ListBox; sütun genişlikleri 105 pt, 120 pt, 385 pt |
Alt alan | Bilgi metni, Listeyi Yenile ve Kapat butonları |
Şekil 4 — Yaklaşan Etkinlikler UserForm ekranı.
14.4 Renk Değiştiren Kalan Süre Kutusu
Kalan gün | Arka plan |
|---|---|
0 — Bugün | #D64541 kırmızı |
1–2 gün | #F2994A turuncu |
3–7 gün | #2F9E6B yeşil |
Kayıt yok | #6F7A8A gri |
14.5 Tam UserForm Kodu
Option Explicit
‘==============================================================================
‘ ETKİNLİK HATIRLATICISI USERFORM
‘==============================================================================
Private WithEvents cmdKapat As MSForms.CommandButton
Private WithEvents cmdYenile As MSForms.CommandButton
Private lstEtkinlikler As MSForms.ListBox
Private lblSayac As MSForms.Label
Private lblSonrakiTarih As MSForms.Label
Private lblSonrakiNot As MSForms.Label
Private lblSonrakiKalan As MSForms.Label
Private mArayuzOlusturuldu As Boolean
Private mAsama As String
‘==============================================================================
‘ FORM AÇILIŞI
‘==============================================================================
Private Sub UserForm_Initialize()
On Error GoTo Hata
mAsama = “Form ayarları”
FormuAyarla
mAsama = “Arayüz bileşenleri”
ArayuzuOlustur
mAsama = “Etkinlik verileri”
VerileriYenile
mAsama = vbNullString
Exit Sub
Hata:
MsgBox “Etkinlik formu hazırlanırken hata oluştu.” & _
vbCrLf & vbCrLf & _
“Aşama: ” & mAsama & vbCrLf & _
“Hata No: ” & Err.Number & vbCrLf & _
“Açıklama: ” & Err.Description, _
vbExclamation, _
“Form Hatası”
End Sub
‘==============================================================================
‘ FORM AYARLARI
‘==============================================================================
Private Sub FormuAyarla()
With Me
.Caption = “Yaklaşan Etkinlikler”
.Width = 700
.Height = 525
.BackColor = RGB(244, 247, 251)
End With
End Sub
‘==============================================================================
‘ ARAYÜZÜ OLUŞTUR
‘==============================================================================
Private Sub ArayuzuOlustur()
Dim lbl As MSForms.Label
If mArayuzOlusturuldu Then Exit Sub
‘————————————————————————–
‘ Üst lacivert alan
‘————————————————————————–
mAsama = “Üst başlık alanı”
Set lbl = EtiketOlustur( _
“lblUstArkaPlan”, _
vbNullString, _
0, _
0, _
660, _
82)
lbl.BackColor = RGB(31, 52, 89)
‘————————————————————————–
‘ Ana başlık
‘————————————————————————–
Set lbl = EtiketOlustur( _
“lblAnaBaslik”, _
“YAKLAŞAN ETKİNLİKLER”, _
24, _
16, _
410, _
27)
With lbl
.BackStyle = fmBackStyleTransparent
.ForeColor = RGB(255, 255, 255)
.Font.Name = “Segoe UI”
.Font.Size = 16
.Font.Bold = True
End With
‘————————————————————————–
‘ Alt başlık
‘————————————————————————–
Set lbl = EtiketOlustur( _
“lblAltBaslik”, _
“Bugün ve önümüzdeki ” & _
CStr(ETKINLIK_UYARI_GUNU) & _
” gün içindeki kayıtlar”, _
25, _
48, _
420, _
18)
With lbl
.BackStyle = fmBackStyleTransparent
.ForeColor = RGB(207, 220, 239)
.Font.Name = “Segoe UI”
.Font.Size = 9
End With
‘————————————————————————–
‘ Etkinlik sayacı
‘————————————————————————–
Set lblSayac = EtiketOlustur( _
“lblSayac”, _
“0 ETKİNLİK”, _
515, _
31, _
120, _
34)
With lblSayac
.BackColor = RGB(64, 112, 160)
.ForeColor = RGB(255, 255, 255)
.Font.Name = “Segoe UI”
.Font.Size = 9
.Font.Bold = True
.TextAlign = fmTextAlignCenter
End With
‘————————————————————————–
‘ En yakın etkinlik kartı
‘————————————————————————–
mAsama = “En yakın etkinlik kartı”
Set lbl = EtiketOlustur( _
“lblOzetArkaPlan”, _
vbNullString, _
24, _
98, _
612, _
80)
lbl.BackColor = RGB(255, 255, 255)
‘————————————————————————–
‘ Kart başlığı
‘————————————————————————–
Set lbl = EtiketOlustur( _
“lblOzetBaslik”, _
“EN YAKIN ETKİNLİK”, _
42, _
109, _
250, _
16)
With lbl
.BackStyle = fmBackStyleTransparent
.ForeColor = RGB(64, 112, 160)
.Font.Name = “Segoe UI”
.Font.Size = 8
.Font.Bold = True
End With
‘————————————————————————–
‘ En yakın tarih
‘————————————————————————–
Set lblSonrakiTarih = EtiketOlustur( _
“lblSonrakiTarih”, _
“-“, _
42, _
132, _
105, _
25)
With lblSonrakiTarih
.BackStyle = fmBackStyleTransparent
.ForeColor = RGB(31, 52, 89)
.Font.Name = “Segoe UI”
.Font.Size = 12
.Font.Bold = True
End With
‘————————————————————————–
‘ En yakın etkinlik açıklaması
‘————————————————————————–
Set lblSonrakiNot = EtiketOlustur( _
“lblSonrakiNot”, _
“-“, _
155, _
128, _
335, _
42)
With lblSonrakiNot
.BackStyle = fmBackStyleTransparent
.ForeColor = RGB(65, 76, 92)
.Font.Name = “Segoe UI”
.Font.Size = 10
.WordWrap = True
End With
‘————————————————————————–
‘ Kalan süre kutusu
‘————————————————————————–
Set lblSonrakiKalan = EtiketOlustur( _
“lblSonrakiKalan”, _
“-“, _
510, _
131, _
110, _
18)
With lblSonrakiKalan
.BackColor = RGB(47, 158, 107)
.ForeColor = RGB(255, 255, 255)
.Font.Name = “Segoe UI”
.Font.Size = 9
.Font.Bold = True
.TextAlign = fmTextAlignCenter
End With
‘————————————————————————–
‘ ETKİNLİK LİSTESİ BÖLÜM BAŞLIĞI
‘————————————————————————–
mAsama = “Etkinlik listesi başlığı”
Set lbl = EtiketOlustur( _
“lblListeBaslikArkaPlan”, _
vbNullString, _
24, _
195, _
612, _
32)
lbl.BackColor = RGB(31, 52, 89)
‘ Sol turuncu vurgu çizgisi
Set lbl = EtiketOlustur( _
“lblListeVurgu”, _
vbNullString, _
24, _
195, _
6, _
32)
lbl.BackColor = RGB(242, 153, 74)
‘ Bölüm başlığı
Set lbl = EtiketOlustur( _
“lblListeBaslik”, _
“ETKİNLİK LİSTESİ”, _
42, _
202, _
260, _
20)
With lbl
.BackStyle = fmBackStyleTransparent
.ForeColor = RGB(255, 255, 255)
.Font.Name = “Segoe UI”
.Font.Size = 10
.Font.Bold = True
.TextAlign = fmTextAlignLeft
End With
‘————————————————————————–
‘ Sütun başlıkları
‘————————————————————————–
KolonBasligiOlustur _
“lblBaslikTarih”, _
“TARİH”, _
24, _
230, _
105, _
28
KolonBasligiOlustur _
“lblBaslikKalan”, _
“KALAN SÜRE”, _
129, _
230, _
120, _
28
KolonBasligiOlustur _
“lblBaslikNot”, _
“ETKİNLİK AÇIKLAMASI”, _
249, _
230, _
385, _
28
‘————————————————————————–
‘ Etkinlik ListBox
‘————————————————————————–
mAsama = “Etkinlik listesi”
Set lstEtkinlikler = Me.Controls.Add( _
“Forms.ListBox.1”, _
“lstEtkinlikler”, _
True)
With lstEtkinlikler
.Left = 24
.Top = 258
.Width = 612
.Height = 157
.ColumnCount = 3
.ColumnWidths = “105 pt;120 pt;385 pt”
.Font.Name = “Segoe UI”
.Font.Size = 10.5
.Font.Bold = False
.BackColor = RGB(250, 252, 255)
.ForeColor = RGB(31, 52, 89)
End With
‘————————————————————————–
‘ Alt bilgi
‘————————————————————————–
Set lbl = EtiketOlustur( _
“lblBilgi”, _
“Geçmiş tarihli kayıtlar gösterilmez. ” & _
“Liste en yakın tarihten başlayarak sıralanır.”, _
24, _
423, _
612, _
18)
With lbl
.BackStyle = fmBackStyleTransparent
.ForeColor = RGB(91, 105, 124)
.Font.Name = “Segoe UI”
.Font.Size = 8.5
End With
‘————————————————————————–
‘ Yenile butonu
‘————————————————————————–
mAsama = “Yenile butonu”
Set cmdYenile = Me.Controls.Add( _
“Forms.CommandButton.1”, _
“cmdYenile”, _
True)
With cmdYenile
.Caption = “Listeyi Yenile”
.Left = 24
.Top = 452
.Width = 125
.Height = 32
.BackColor = RGB(64, 112, 160)
.ForeColor = RGB(255, 255, 255)
.Font.Name = “Segoe UI”
.Font.Size = 9
.Font.Bold = True
End With
‘————————————————————————–
‘ Kapat butonu
‘————————————————————————–
mAsama = “Kapat butonu”
Set cmdKapat = Me.Controls.Add( _
“Forms.CommandButton.1”, _
“cmdKapat”, _
True)
With cmdKapat
.Caption = “Kapat”
.Left = 511
.Top = 452
.Width = 125
.Height = 32
.BackColor = RGB(31, 52, 89)
.ForeColor = RGB(255, 255, 255)
.Font.Name = “Segoe UI”
.Font.Size = 9
.Font.Bold = True
End With
mArayuzOlusturuldu = True
End Sub
‘==============================================================================
‘ VERİLERİ FORMA YÜKLE
‘==============================================================================
Public Sub VerileriYenile()
Dim i As Long
Dim listeSatiri As Long
Dim kalanGun As Long
On Error GoTo Hata
If lstEtkinlikler Is Nothing Then Exit Sub
lstEtkinlikler.Clear
If gEtkinlikSayisi <= 0 Then
BosKayitGoster
Exit Sub
End If
If Not IsArray(gEtkinlikler) Then
BosKayitGoster
Exit Sub
End If
lblSayac.Caption = CStr(gEtkinlikSayisi) & ” ETKİNLİK”
lblSonrakiTarih.Caption = _
Format$(CDate(gEtkinlikler(1, 1)), “dd.mm.yyyy”)
lblSonrakiNot.Caption = _
CStr(gEtkinlikler(1, 2))
kalanGun = CLng(gEtkinlikler(1, 3))
lblSonrakiKalan.Caption = KalanGunMetni(kalanGun)
Select Case kalanGun
Case 0
lblSonrakiKalan.BackColor = RGB(214, 69, 65)
Case 1 To 2
lblSonrakiKalan.BackColor = RGB(242, 153, 74)
Case Else
lblSonrakiKalan.BackColor = RGB(47, 158, 107)
End Select
For i = 1 To gEtkinlikSayisi
lstEtkinlikler.AddItem _
Format$(CDate(gEtkinlikler(i, 1)), “dd.mm.yyyy”)
listeSatiri = lstEtkinlikler.ListCount – 1
lstEtkinlikler.List(listeSatiri, 1) = _
KalanGunMetni(CLng(gEtkinlikler(i, 3)))
lstEtkinlikler.List(listeSatiri, 2) = _
CStr(gEtkinlikler(i, 2))
Next i
‘ Form açıldığında hiçbir satır seçili gelmez.
If lstEtkinlikler.ListCount > 0 Then
lstEtkinlikler.ListIndex = -1
End If
Exit Sub
Hata:
MsgBox “Etkinlik verileri forma aktarılamadı.” & _
vbCrLf & vbCrLf & _
“Hata No: ” & Err.Number & vbCrLf & _
“Açıklama: ” & Err.Description, _
vbExclamation, _
“Veri Yükleme Hatası”
End Sub
‘==============================================================================
‘ BOŞ KAYIT GÖRÜNÜMÜ
‘==============================================================================
Private Sub BosKayitGoster()
Dim listeSatiri As Long
lblSayac.Caption = “0 ETKİNLİK”
lblSonrakiTarih.Caption = “-”
lblSonrakiNot.Caption = _
“Önümüzdeki ” & _
CStr(ETKINLIK_UYARI_GUNU) & _
” gün içinde yaklaşan etkinlik bulunamadı.”
lblSonrakiKalan.Caption = “KAYIT YOK”
lblSonrakiKalan.BackColor = RGB(111, 122, 138)
lstEtkinlikler.AddItem “-”
listeSatiri = lstEtkinlikler.ListCount – 1
lstEtkinlikler.List(listeSatiri, 1) = “-”
lstEtkinlikler.List(listeSatiri, 2) = _
“Yaklaşan etkinlik bulunamadı.”
lstEtkinlikler.ListIndex = -1
End Sub
‘==============================================================================
‘ YENİLE BUTONU
‘==============================================================================
Private Sub cmdYenile_Click()
On Error GoTo Hata
EtkinlikVerileriniHazirla
VerileriYenile
Exit Sub
Hata:
MsgBox “Etkinlik listesi yenilenemedi.” & _
vbCrLf & vbCrLf & _
“Hata No: ” & Err.Number & vbCrLf & _
“Açıklama: ” & Err.Description, _
vbExclamation, _
“Liste Yenileme Hatası”
End Sub
‘==============================================================================
‘ KAPAT BUTONU
‘==============================================================================
Private Sub cmdKapat_Click()
Unload Me
End Sub
‘==============================================================================
‘ DİNAMİK ETİKET OLUŞTUR
‘==============================================================================
Private Function EtiketOlustur( _
ByVal kontrolAdi As String, _
ByVal metin As String, _
ByVal sol As Single, _
ByVal ust As Single, _
ByVal genislik As Single, _
ByVal yukseklik As Single) As MSForms.Label
Dim lbl As MSForms.Label
Set lbl = Me.Controls.Add( _
“Forms.Label.1”, _
kontrolAdi, _
True)
With lbl
.Caption = metin
.Left = sol
.Top = ust
.Width = genislik
.Height = yukseklik
.BackColor = RGB(255, 255, 255)
.ForeColor = RGB(48, 58, 73)
.Font.Name = “Segoe UI”
.Font.Size = 9
End With
Set EtiketOlustur = lbl
End Function
‘==============================================================================
‘ SÜTUN BAŞLIĞI OLUŞTUR
‘==============================================================================
Private Sub KolonBasligiOlustur( _
ByVal kontrolAdi As String, _
ByVal metin As String, _
ByVal sol As Single, _
ByVal ust As Single, _
ByVal genislik As Single, _
ByVal yukseklik As Single)
Dim lbl As MSForms.Label
Set lbl = EtiketOlustur( _
kontrolAdi, _
metin, _
sol, _
ust + 6, _
genislik, _
16)
With lbl
.BackColor = RGB(47, 87, 135)
.ForeColor = RGB(255, 255, 255)
.Font.Name = “Segoe UI”
.Font.Size = 9
.Font.Bold = True
.Caption = Space$(3) & metin
.TextAlign = fmTextAlignLeft
End With
End Sub
15. BuÇalışmaKitabı Olay Kodları
15.1 Workbook_Open
Dosya açıldığında YaklasanEtkinlikleriKontrolEt False çağrılır. Uygun kayıt varsa form açılır; kayıt yoksa sessizce devam edilir.
15.2 Workbook_SheetChange
Notlar sayfasında D veya E sütunundaki bir hücre değiştiğinde etkinlik kontrolü yeniden çalışır. Böylece tarih veya açıklama eklendikten sonra açık form güncel veriyi gösterebilir.
15.3 Tam Çalışma Kitabı Kodu
VBA Proje Gezgini’nde BuÇalışmaKitabı nesnesine çift tıklayın ve aşağıdaki kodu yapıştırın.
Option Explicit
‘==============================================================================
‘ DOSYA AÇILDIĞINDA ETKİNLİKLERİ KONTROL ET
‘==============================================================================
Private Sub Workbook_Open()
On Error GoTo Cikis
YaklasanEtkinlikleriKontrolEt False
Cikis:
End Sub
‘==============================================================================
‘ NOTLAR SAYFASINDA D VEYA E SÜTUNU DEĞİŞİNCE KONTROL ET
‘==============================================================================
Private Sub Workbook_SheetChange( _
ByVal Sh As Object, _
ByVal Target As Range)
Dim kontrolAlani As Range
On Error GoTo Cikis
If Sh.Name <> ETKINLIK_SAYFA Then Exit Sub
Set kontrolAlani = Sh.Range( _
“D” & ETKINLIK_ILK_SATIR & _
“:E” & Sh.Rows.Count)
If Intersect(Target, kontrolAlani) Is Nothing Then Exit Sub
YaklasanEtkinlikleriKontrolEt False
Cikis:
End Sub
Sayfa modülleri: Kaynak dosyada Sayfa1 ve Sayfa2 modüllerinde olay kodu bulunmamaktadır. Kod eklenmesi gereken yerler standart modül, UserForm ve BuÇalışmaKitabı modülüdür. |
16. Sistemin Test Edilmesi
16.1 Formülleri Test Etme
1. Takvim sayfasında ayı Haz, yılı 2026 seçin.
2. E4:K4 satırının 1–7 Haziran tarihlerini göstermesini kontrol edin.
3. Sonraki tarih satırlarının 8–14, 15–21, 22–28 ve 29 Haziran–5 Temmuz şeklinde devam ettiğini doğrulayın.
4. Temmuz günlerinin koşullu biçimlendirme ile soluk görünmesini kontrol edin.
5. Notlar sayfasına 24.06.2026 / Kamera alınacak kaydı girin ve G11 hücresinde görünmesini doğrulayın.
16.2 VBA Formunu Manuel Test Etme
1. Notlar sayfasına bugün veya önümüzdeki 7 gün içinde en az bir tarih ekleyin.
2. Alt+F8 tuşlarına basın.
3. EtkinlikHatirlaticisiniTestEt makrosunu seçip Çalıştır düğmesine basın.
4. Formda etkinlik sayısı, en yakın kayıt ve liste satırlarını kontrol edin.
5. Listeyi Yenile butonuna basarak verilerin yeniden okunmasını test edin.
6. Kapat butonunun formu kapattığını doğrulayın.
16.3 Dosya Açılış Testi
1. Dosyayı kaydedip kapatın.
2. Dosyayı yeniden açın ve güvenlik uyarısı varsa İçeriği Etkinleştir seçeneğini kullanın.
3. Yaklaşan kayıt varsa UserForm’un otomatik açıldığını doğrulayın.
4. Yaklaşan kayıt yoksa formun açılmamasının normal olduğunu unutmayın.
17. Günlük Kullanım Rehberi
1. Notlar sayfasında tablonun son satırına tarih ve açıklama ekleyin.
2. Takvim sayfasına geçin ve açılır listelerden ay ile yılı seçin.
3. İlgili güne ait açıklamanın tarih satırının altındaki hücrede göründüğünü kontrol edin.
4. Yaklaşan etkinlik ekranını elle görmek için Alt+F8 → EtkinlikHatirlaticisiniTestEt yolunu kullanın.
5. Form açıkken yeni kayıt eklediğinizde Listeyi Yenile düğmesini kullanabilir veya D/E sütunundaki değişikliğin tetiklediği otomatik yenilemeyi bekleyebilirsiniz.
6. Çalışmayı tamamladığınızda dosyayı .xlsm biçiminde kaydedin.
17.1 Etkinlik Listesinin Sıralaması
Kod tarihleri DateDiff ile değerlendirir ve EtkinlikleriSirala prosedüründeki karşılaştırma ile artan tarihe göre sıralar. Aynı tarihli kayıtların kendi aralarındaki özgün satır sırası korunması garanti edilmez; yalnızca tarih önceliği hedeflenir.
18. Sorun Giderme
Sorun | Muhtemel neden | Çözüm |
|---|---|---|
#AD? / fonksiyon tanınmıyor | Excel sürümü SIRALI veya FİLTRE desteklemiyor | Microsoft 365 veya Excel 2021+ kullanın. |
#TAŞMA! | Dinamik dizi alanında dolu hücre var veya aynı tarihte birden fazla not döndü | Taşma alanını boşaltın; her tarih için tek not kullanın veya formülü yeniden tasarlayın. |
Not görünmüyor | Tarih metin olarak girilmiş, tanımlanmış ad eksik veya E13:K13 formülsüz | Tarihi gerçek tarih yapın; Ad Yöneticisini kontrol edin; son satır için önerilen formülü ekleyin. |
Form açılmıyor | Makrolar kapalı, dosya .xlsx, modül/form adı yanlış | Makroları etkinleştirin; .xlsm kaydedin; adları birebir kontrol edin. |
“Sub or Function not defined” | Standart modül kodu eksik veya modül adı/konumu yanlış | modEtkinlikHatirlatici kodunu standart modüle eksiksiz yapıştırın. |
User-defined type not defined | Kod yanlış nesneye yapıştırılmış veya MSForms ortamı yüklenmemiş | Kodu Excel Windows masaüstü VBA’sında, UserForm kod penceresinde kullanın. |
Liste boş | Bugün–+7 gün aralığında kayıt yok | Test için uygun tarih ekleyin veya makroyu kayıt yok mesajıyla çalıştırın. |
Yanlış ay günleri | Ay kısaltması yerel Excel tarafından tarih olarak yorumlanmıyor | Türkçe Excel/Windows tarih ayarlarını kullanın veya başlangıç formülünü TARİH fonksiyonuyla yeniden tasarlayın. |
18.1 VBA Hata Mesajlarının Okunması
Kod, ana kontrol, veri hazırlama, form başlatma, veri yükleme ve yenileme aşamalarında hata numarası ile açıklamayı kullanıcıya gösterir. Hata mesajındaki “Aşama” bilgisi özellikle UserForm’un hangi bölümünde sorun oluştuğunu belirlemeyi kolaylaştırır.
19. Teknik Sınırlamalar ve İyileştirme Notları
Konu | Kaynak dosyanın durumu | Etkisi / öneri |
|---|---|---|
Takvim hafta sayısı | 5 hafta | Bazı aylar altıncı takvim satırına ihtiyaç duyabilir; kaynak dosya bu günleri göstermez. |
Son not satırı | E13:K13 formülsüz | Beşinci hafta notları görünmez; bölüm 10.2’deki öneriyle tamamlanabilir. |
Tanımlanmış ad kapsamı | D:D ve E:E tam sütun | Çok büyük veri setlerinde hesaplama yükü artabilir. |
Aynı gün çoklu kayıt | FİLTRE birden fazla satır döndürebilir | Alt hücreler doluysa #TAŞMA! riski vardır. |
Ay metni | Türkçe üç harfli ay kısaltması | Farklı dil/bölge ayarlarında tarih oluşturma başarısız olabilir. |
Yıl aralığı | 2026–2036 sabit liste | Daha ileri yıllar için veri doğrulama kaynağı güncellenmelidir. |
UserForm platformu | MSForms kullanır | Mac Excel veya Excel Online üzerinde aynı davranış garanti edilmez. |
Şeffaflık notu: Bu bölümdeki sınırlamalar kaynak dosyada yapılan doğrudan teknik incelemenin sonucudur. Kılavuz, sistemin mevcut yapısını öğretirken kullanıcıların karşılaşabileceği gerçek riskleri de açıkça belirtir. |
20. Ekler
Ek A — Formül Haritası
Hücre/Aralık | Türkçe Excel formülü / içerik |
|---|---|
E4 | =SIRALI(1;7;(1&C1&C4)-HAFTANINGÜNÜ((1&C1&C4);2)+1) |
E6 | =SIRALI(1;7;K4+1) |
E8 | =SIRALI(1;7;K6+1) |
E10 | =SIRALI(1;7;K8+1) |
E12 | =SIRALI(1;7;K10+1) |
E5:K5 | =FİLTRE(Not;Tarih=<üstteki tarih hücresi>;””) |
E7:K7 | =FİLTRE(Not;Tarih=<üstteki tarih hücresi>;””) |
E9:K9 | =FİLTRE(Not;Tarih=<üstteki tarih hücresi>;””) |
E11:K11 | =FİLTRE(Not;Tarih=<üstteki tarih hücresi>;””) |
E13:K13 | Kaynak dosyada formül yok; öneri: =FİLTRE(Not;Tarih=E12;””) ve sağa kopyala |
Koşullu biçimlendirme | =AY(E4)<>AY($C$1&$C$4) — uygulama: $E$4:$K$13 |
Ek B — VBA Bileşen Haritası
Dosya içindeki bileşen | Tür | Kod durumu |
|---|---|---|
BuÇalışmaKitabı | Workbook sınıf modülü | Workbook_Open ve Workbook_SheetChange kodları var |
Sayfa1 | Takvim sayfa modülü | Boş |
Sayfa2 | Notlar sayfa modülü | Boş |
modEtkinlikHatirlatici | Standart modül | Etkinlik okuma, filtreleme, sıralama ve form açma kodları var |
frmEtkinlikHatirlatici | UserForm | Arayüz ve kontroller çalışma zamanında oluşturuluyor |
Ek C — Hızlı Kurulum Kontrol Listesi
- Dosya .xlsm olarak kaydedildi.
- Sayfalar Takvim ve Notlar olarak adlandırıldı.
- Notlar!D1:E55 aralığı Tablo1 yapıldı.
- Tarih, Not ve Notlar tanımlanmış adları oluşturuldu.
- Ay ve yıl veri doğrulamaları eklendi.
- SIRALI formülleri E4, E6, E8, E10 ve E12’ye yazıldı.
- FİLTRE formülleri kaynak dosyadaki E5:K11 alanına uygulandı.
- Koşullu biçimlendirme E4:K13 alanına eklendi.
- modEtkinlikHatirlatici standart modülü oluşturuldu.
- frmEtkinlikHatirlatici boş UserForm’u oluşturuldu ve kod yapıştırıldı.
- BuÇalışmaKitabı olay kodları eklendi.
- EtkinlikHatirlaticisiniTestEt makrosu çalıştırıldı.
- Dosya kapatılıp yeniden açılarak otomatik uyarı test edildi.
Sonuç
Bu yapı tamamlandığında kullanıcı, Notlar sayfasına tarih ve açıklama girerek aylık takvimini otomatik besleyebilir; yaklaşan etkinlikleri dosya açılışında veya liste değişikliklerinden sonra profesyonel bir UserForm üzerinde görebilir. Çalışmanın temel başarısı, Excel dinamik dizileri ile VBA olaylarının aynı veri kaynağını kullanarak birlikte çalışmasına dayanır.
Yayın öncesi son kontrol: Web sayfasında paylaşmadan önce örnek kayıtları anonimleştirin, .xlsm dosyasını güvenilir bir indirme alanında barındırın ve kullanıcıları makroları yalnızca güvenilir dosyalarda etkinleştirmeleri konusunda bilgilendirin. |
|
TAKVİMLİ NOTLAR VE Excel ve VBA ile Sıfırdan Yapım Kılavuzu |

|
DOKÜMAN SÜRÜMÜ |
HAZIRLANMA TARİHİ |
NİTELİK |
|
1.0 |
21 Haziran 2026 |
Adım Adım Uygulamalı Rehber |
Kaynak dosya: Tavimli Notlar_VBA.xlsm
Doküman Hakkında
Bu kılavuz, yüklenen “Tavimli Notlar_VBA.xlsm” çalışma kitabının OOXML yapısı, formülleri, biçimlendirmeleri, veri doğrulamaları, tanımlanmış adları ve VBA projesi doğrudan incelenerek hazırlanmıştır. Ekran görüntüleri, kaynak dosyadaki görünüm ve çalışma mantığını desteklemek amacıyla kullanılmıştır.
|
Doğruluk ilkesi: Formül, hücre adresi, tablo adı ve VBA bileşenleri kaynak dosyadan alınmıştır. Kaynak dosyada bulunmayan veya eksik olan noktalar “teknik not” ya da “isteğe bağlı iyileştirme” olarak açıkça ayrılmıştır. |
|
Bilgi |
Kaynak dosyada tespit edilen değer |
|---|---|
|
Dosya türü |
Excel Makro Etkin Çalışma Kitabı (.xlsm) |
|
Çalışma sayfaları |
Takvim, Notlar |
|
Excel tablosu |
Tablo1 — Notlar!D1:E55 |
|
Tanımlanmış adlar |
Tarih, Not, Notlar |
|
Standart modül |
modEtkinlikHatirlatici |
|
UserForm |
frmEtkinlikHatirlatici |
|
Çalışma kitabı modülü |
BuÇalışmaKitabı (ThisWorkbook karşılığı) |
|
Tarih aralığı |
Bugün dahil, önümüzdeki 7 gün dahil — toplam 8 tarih |
İçindekiler
3. Gerekli Excel Sürümü ve Güvenlik Ayarları 1
3.1 Önerilen Excel Sürümleri 1
3.2 Makroların Etkinleştirilmesi 1
4. Yeni Çalışma Kitabının Hazırlanması 1
5. Notlar Sayfasının Hazırlanması 1
5.2 Örnek Kayıtların Girilmesi 1
5.3 Aralığı Excel Tablosuna Dönüştürme 1
6. Takvim Sayfasının Tasarımı 1
6.3 Satır Yükseklikleri ve Sütun Genişlikleri 1
7. Ay Seçme Listesinin Hazırlanması 1
8. Yıl Seçme Listesinin Hazırlanması 1
9. Takvim Tarihlerinin Otomatik Oluşturulması 1
9.1 İlk Haftanın Başlangıcını Bulma 1
9.3 Tarihlerin Yalnızca Gün Numarası Olarak Gösterilmesi 1
10. Tarihe Bağlı Notların Takvimde Gösterilmesi 1
10.1 Kaynak Dosyadaki Formül Yapısı 1
10.2 Son Haftayı Tamamlamak İçin Önerilen Formül 1
10.3 Aynı Tarihte Birden Fazla Not 1
11. Koşullu Biçimlendirme Kuralları 1
11.1 Seçili Ay Dışındaki Günleri Soluklaştırma 1
13. Standart Modül: modEtkinlikHatirlatici 1
13.1 Sabitler ve Genel Değişkenler 1
13.3 Tam Standart Modül Kodu 1
14. UserForm: frmEtkinlikHatirlatici 1
14.1 Boş Formun Oluşturulması 1
14.2 Form Boyutları ve Renkleri 1
14.3 Çalışma Zamanında Oluşturulan Kontroller 1
14.4 Renk Değiştiren Kalan Süre Kutusu 1
15. BuÇalışmaKitabı Olay Kodları 1
15.3 Tam Çalışma Kitabı Kodu 1
16.2 VBA Formunu Manuel Test Etme 1
17.1 Etkinlik Listesinin Sıralaması 1
18.1 VBA Hata Mesajlarının Okunması 1
19. Teknik Sınırlamalar ve İyileştirme Notları 1
Ek C — Hızlı Kurulum Kontrol Listesi 1
|
Word kullanımı: Bu alan gerçek bir Word içindekiler alanıdır. Sayfa numaralarını ve alt başlıkları yenilemek için Ctrl+A ardından F9 tuşlarına basın ve “Tüm tabloyu güncelleştir” seçeneğini kullanın. |
1. Uygulama Ne İşe Yarar?
Takvimli Notlar ve Etkinlik Hatırlatıcısı; bir ayın günlerini otomatik oluşturan, belirli tarihlere girilen açıklamaları takvim üzerinde gösteren ve yaklaşan kayıtları VBA UserForm ile kullanıcıya bildiren bir Excel çözümüdür.
- Ay ve yıl değiştiğinde takvim tarihleri otomatik yeniden hesaplanır.
- Notlar sayfasına girilen tarih–açıklama kayıtları ilgili günün altındaki alanda gösterilir.
- Seçilen aya ait olmayan günler soluk renkte görünür.
- Cumartesi ve pazar sütunları açık mavi arka planla ayrıştırılır.
- Dosya açıldığında bugün ve önümüzdeki 7 gün içindeki etkinlikler kontrol edilir.
- Geçmiş tarihli kayıtlar uyarı ekranında gösterilmez.
- Kayıtlar en yakın tarihten en uzak tarihe doğru sıralanır.
- UserForm modeless açıldığı için kullanıcı form açıkken Excel üzerinde çalışmaya devam edebilir.
1.1 Çözdüğü Problem
Tarihlerin ayrı bir listede tutulması, yaklaşan işlerin gözden kaçmasına ve aylık görünüm ile etkinlik listesinin birbirinden kopuk kalmasına yol açar. Bu çalışma, liste tabanlı kayıtları görsel bir takvim ve otomatik uyarı penceresiyle tek dosyada birleştirir.
1.2 Bileşenlerin Görevi
|
Bileşen |
Görev |
|---|---|
|
Takvim sayfası |
Ay/yıl seçimi, günlerin üretimi, hafta sonu ayrımı ve tarihe bağlı notların gösterimi. |
|
Notlar sayfası |
Tarih ve etkinlik açıklamalarının Excel tablosunda saklanması. |
|
modEtkinlikHatirlatici |
Yaklaşan kayıtların okunması, filtrelenmesi, sıralanması ve forma aktarılması. |
|
frmEtkinlikHatirlatici |
En yakın etkinlik kartı, etkinlik listesi, yenileme ve kapatma işlemleri. |
|
BuÇalışmaKitabı |
Dosya açılışında ve Notlar sayfasındaki değişikliklerde kontrol prosedürünü tetikleme. |
1.3 Tarih Aralığının Yorumu
Kodda kalan gün sayısı 0 ile 7 arasında kontrol edilir. Bu nedenle “bugün ve önümüzdeki 7 gün” ifadesi bugün dahil olmak üzere toplam 8 takvim tarihini kapsar. Örneğin bugün 21.06.2026 ise 21.06.2026–28.06.2026 aralığındaki kayıtlar gösterilir.
2. Teknik İnceleme Özeti
|
Öğe |
Tespit |
|---|---|
|
Takvim sayfası boyutu |
C1:X13 |
|
Takvim görünür ana alanı |
C1:K13 |
|
Ay yardımcı listesi |
M1:X1 |
|
Takvim haftası sayısı |
5 haftalık blok: tarih satırları 4, 6, 8, 10 ve 12 |
|
Not satırları |
5, 7, 9, 11 ve 13 |
|
Birleştirilmiş alanlar |
C1:D3, C4:D4, C5:D13 ve E1:K3 içindeki 7 ayrı gün başlığı |
|
Veri doğrulama |
2 kural: ay listesi ve yıl listesi |
|
Koşullu biçimlendirme |
1 kural: seçili aya ait olmayan tarihleri soluklaştırma |
|
Dinamik tarih formülleri |
5 adet SIRALI dizi formülü |
|
Not formülleri |
Kaynak dosyada E5:K11 aralığında 28 adet FİLTRE formülü |
|
Son not satırı |
E13:K13 biçimlendirilmiş, ancak kaynak dosyada FİLTRE formülü yok |
|
Notlar sayfası boyutu |
D1:E55 |
|
Kayıt sayısı |
54 veri satırı (başlık hariç) |
|
Form kontrolleri |
19 kontrol çalışma zamanında VBA ile oluşturuluyor |

Şekil 1 — Kaynak çalışma kitabındaki Takvim sayfası ve E4 dinamik dizi formülü.
|
Kaynak dosya notu: Dikey başlık hücresindeki metin “AYLIK PLANYAYICI” olarak kayıtlıdır. Rehberde kullanıcıya gösterilecek doğru yazım “AYLIK PLANLAYICI” olarak önerilmiştir; bu bir yazım düzeltmesidir, kod mantığını etkilemez. |
3. Gerekli Excel Sürümü ve Güvenlik Ayarları
3.1 Önerilen Excel Sürümleri
Çalışma kitabında SIRALI ve FİLTRE gibi dinamik dizi fonksiyonları kullanıldığı için Microsoft 365 veya Excel 2021 ve üzeri önerilir. Daha eski Excel sürümlerinde bu fonksiyonlar bulunmayabilir ve hücrelerde #AD? ya da benzeri uyumluluk hataları oluşabilir.
|
Özellik |
Gereksinim |
|---|---|
|
SIRALI |
Microsoft 365 / Excel 2021 ve daha yeni sürümler |
|
FİLTRE |
Microsoft 365 / Excel 2021 ve daha yeni sürümler |
|
VBA UserForm |
Windows masaüstü Excel önerilir |
|
Makro açılış olayı |
Dosyanın .xlsm biçiminde olması ve makrolara izin verilmesi gerekir |
3.2 Makroların Etkinleştirilmesi
1. Dosyayı açın ve üst kısımda güvenlik uyarısı görünürse “İçeriği Etkinleştir” seçeneğini kullanın.
2. Kalıcı ayarı kontrol etmek için Dosya → Seçenekler → Güven Merkezi → Güven Merkezi Ayarları → Makro Ayarları yolunu izleyin.
3. Güvenlik açısından “VBA makrolarını bildirimle devre dışı bırak” seçeneği önerilir. “Tüm makroları etkinleştir” seçeneğini genel kullanım için tercih etmeyin.
4. Dosyayı yalnızca güvenilir bir kaynaktan aldığınızda makroları etkinleştirin.
|
Önemli: Dosya .xlsx olarak kaydedilirse VBA projesi silinir. Bu çalışma mutlaka Excel Makro Etkin Çalışma Kitabı (*.xlsm) biçiminde saklanmalıdır. |
4. Yeni Çalışma Kitabının Hazırlanması
1. Excel’i açın ve Boş çalışma kitabı oluşturun.
2. Dosya → Farklı Kaydet → Dosya Türü → Excel Makro Etkin Çalışma Kitabı (*.xlsm) seçimini yapın.
3. İlk sayfanın adını Takvim, ikinci sayfanın adını Notlar olarak değiştirin.
4. Geliştirici sekmesi görünmüyorsa Dosya → Seçenekler → Şeridi Özelleştir bölümünden Geliştirici kutusunu işaretleyin.
5. Alt+F11 ile Visual Basic Düzenleyicisini açın.
6. Proje Gezgini görünmüyorsa Ctrl+R, Özellikler penceresi görünmüyorsa F4 tuşunu kullanın.
4.1 Sayfa Kod Adları
Kaynak dosyada Takvim sayfasının kod adı “Sayfa1”, Notlar sayfasının kod adı “Sayfa2”, çalışma kitabı modülünün kod adı ise “BuÇalışmaKitabı”dır. VBA kodu sayfa adını sabit üzerinden “Notlar” olarak kullandığı için kullanıcı görünen sayfa adını değiştirmemelidir.
|
Kontrol listesi: Dosya türü .xlsm, sayfa adları Takvim ve Notlar, Geliştirici sekmesi açık, makro güvenliği bildirimli ve VBA Düzenleyicisi erişilebilir olmalıdır. |
5. Notlar Sayfasının Hazırlanması
5.1 Hücre Yerleşimi
|
Alan |
Hücre/Aralık |
İçerik |
Biçim |
|---|---|---|---|
|
Tarih başlığı |
D1 |
Tarih |
Tablo başlığı |
|
Not başlığı |
E1 |
Not |
Tablo başlığı |
|
Tarih kayıtları |
D2:D55 |
Excel tarih değerleri |
Kısa tarih biçimi |
|
Açıklamalar |
E2:E55 |
Etkinlik/not metni |
Metin |
|
Tablo aralığı |
D1:E55 |
Başlık + 54 veri satırı |
TableStyleMedium2 |
Kaynak dosyada Notlar sayfasında kılavuz çizgileri kapalıdır. D sütunu genişliği 12, E sütunu genişliği 39 ve varsayılan satır yüksekliği 14,5’tir.
5.2 Örnek Kayıtların Girilmesi
|
Tarih |
Not |
|---|---|
|
07.06.2026 |
X Doğum Günü |
|
15.06.2026 |
Abonelik iptali |
|
22.06.2026 |
Ekip toplantısı yapılacak |
|
24.06.2026 |
Kamera alınacak |
|
28.06.2026 |
Ankaya toplantı |
Tarih hücrelerine metin değil, Excel’in gerçek tarih değerlerini girin. Hücre biçimini Giriş → Sayı → Kısa Tarih olarak ayarlayın. VBA kodu IsDate ve DateValue kontrollerini kullandığı için geçersiz metinler atlanır.
5.3 Aralığı Excel Tablosuna Dönüştürme
1. D1:E55 aralığını seçin.
2. Ekle → Tablo komutunu kullanın veya Ctrl+T tuşlarına basın.
3. “Tablom başlık içeriyor” kutusunu işaretleyin.
4. Tablo Tasarımı → Tablo Adı alanında kaynak dosyadaki gerçek adı kullanın: Tablo1.
5. Tablo stili olarak kaynak dosyada TableStyleMedium2 uygulanmıştır.
5.4 Tanımlanmış Adlar
Formüllerde tablo yapılandırılmış başvurusu yerine çalışma kitabı kapsamındaki tanımlanmış adlar kullanılır. Formüller → Ad Yöneticisi → Yeni yoluyla aşağıdaki üç adı oluşturun.
|
Ad |
Başvurduğu Yer |
Kullanım |
|---|---|---|
|
Tarih |
=Notlar!$D:$D |
FİLTRE koşulunda tarih sütunu |
|
Not |
=Notlar!$E:$E |
FİLTRE sonucunda döndürülecek açıklama sütunu |
|
Notlar |
=Tablo1[#All] |
Tablonun tüm alanını temsil eden ek ad |
6. Takvim Sayfasının Tasarımı
6.1 Ana Yerleşim
|
Alan |
Hücre/Aralık |
İçerik |
Kaynak biçimlendirme |
|---|---|---|---|
|
Ay seçimi |
C1:D3 (birleşik) |
Haz gibi ay kısaltması |
Koyu lacivert dolgu; 24 punto kalın, açık yeşil yazı; ortalı |
|
Yıl seçimi |
C4:D4 (birleşik) |
2026 |
Ay alanıyla aynı stil |
|
Dikey başlık |
C5:D13 (birleşik) |
AYLIK PLANLAYICI |
Koyu lacivert; 28 punto beyaz kalın; dikey yön |
|
Gün başlıkları |
E1:K3 |
Pzt–Paz |
Koyu lacivert; 16 punto beyaz kalın; ortalı |
|
Hafta içi tarihleri |
E4:I12 çift satırlar |
Gün numarası |
Beyaz; 14 punto kalın; d biçimi |
|
Hafta sonu tarihleri |
J4:K12 çift satırlar |
Gün numarası |
Açık mavi; 14 punto kalın |
|
Hafta içi notları |
E5:I13 tek satırlar |
Etkinlik metni |
Açık gri; 9 punto kırmızı kalın; kaydırmalı |
|
Hafta sonu notları |
J5:K13 tek satırlar |
Etkinlik metni |
Açık mavi; 9 punto kırmızı kalın; kaydırmalı |
|
Ay listesi |
M1:X1 |
Oca–Ara |
Yardımcı liste |
6.2 Birleştirilmiş Hücreler
Kaynak dosyada toplam 10 birleştirilmiş alan vardır: C1:D3, C4:D4, C5:D13 ile E1:E3, F1:F3, G1:G3, H1:H3, I1:I3, J1:J3 ve K1:K3.
6.3 Satır Yükseklikleri ve Sütun Genişlikleri
|
Satır/Sütun |
Değer |
|---|---|
|
1–3. satırlar |
9,75 |
|
4, 6, 8, 10, 12. satırlar |
30,75 |
|
5, 7, 9, 11, 13. satırlar |
50,25 |
|
D sütunu |
6,54296875 |
|
E:K sütunları |
14 |
|
C sütunu |
Özel genişlik tanımlanmamış; Excel varsayılanı kullanılır |
|
M:X sütunları |
Özel genişlik tanımlanmamış; yardımcı liste görünür durumdadır |
6.4 Renk Paleti
|
Kullanım |
RGB / HEX |
Açıklama |
|---|---|---|
|
Ana lacivert |
RGB(0,32,96) / #002060 |
Ay/yıl alanı, gün başlıkları, dikey planlayıcı |
|
Hafta sonu açık mavisi |
RGB(217,241,255) / #D9F1FF |
Cumartesi–pazar tarih ve not alanları |
|
Not satırı açık grisi |
Yaklaşık RGB(242,242,242) / #F2F2F2 |
Tema beyazının %5 koyulaştırılmış hali |
|
Etkinlik yazısı |
RGB(255,0,0) / #FF0000 |
Takvim notları |
|
Ay/yıl yazısı |
Tema Accent 6, Tint +0,40; yaklaşık #95CA82 |
Kaynak tema tabanlı açık yeşil |
|
Soluk tarih yazısı |
Yaklaşık #F2F2F2 |
Koşullu biçimlendirme ile diğer ay günleri |
7. Ay Seçme Listesinin Hazırlanması
Ay yardımcı listesi Takvim sayfasında M1:X1 aralığında tutulur. Kaynak dosyada bu sütunlar gizli değildir; ekranın sağında yardımcı alan olarak yer alır.
|
Hücre |
Değer |
|---|---|
|
M1 |
Oca |
|
N1 |
Şub |
|
O1 |
Mar |
|
P1 |
Nis |
|
Q1 |
May |
|
R1 |
Haz |
|
S1 |
Tem |
|
T1 |
Ağu |
|
U1 |
Eyl |
|
V1 |
Eki |
|
W1 |
Kas |
|
X1 |
Ara |
1. C1:D3 birleşik alanını seçin.
2. Veri → Veri Doğrulama komutunu açın.
3. İzin Ver alanında Liste seçin.
4. Kaynak alanına =$M$1:$X$1 yazın.
5. Boşluğu yoksay ve Hücre içi açılır liste seçeneklerini açık bırakın.
6. Tamam düğmesine basın.
Ay listesi veri doğrulama kaynağı
=$M$1:$X$1
8. Yıl Seçme Listesinin Hazırlanması
Yıl seçimi C4:D4 birleşik alanındadır. Kaynak dosyada yıllar hücre aralığından değil, veri doğrulama kuralının içine doğrudan yazılmıştır.
Kaynak dosyada saklanan liste
2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036
1. C4:D4 birleşik alanını seçin.
2. Veri → Veri Doğrulama → Liste seçimini yapın.
3. Kaynak alanına 2026–2036 yıllarını yazın.
4. Windows bölgesel ayarınız liste ayırıcısı olarak noktalı virgül kullanıyorsa değerleri noktalı virgülle ayırın; dosyanın OOXML kaydında virgül kullanılmıştır.
5. Tamam düğmesine basın.
9. Takvim Tarihlerinin Otomatik Oluşturulması
9.1 İlk Haftanın Başlangıcını Bulma
E4 hücresi
=SIRALI(1;7;(1&C1&C4)-HAFTANINGÜNÜ((1&C1&C4);2)+1)
Formül 1 satır ve 7 sütundan oluşan bir dizi üretir. “1&C1&C4” ifadesi seçili ayın ilk gününü oluşturur; örneğin C1=Haz ve C4=2026 iken “1Haz2026” elde edilir. HAFTANINGÜNÜ(…;2) pazartesiyi 1 kabul eder. Böylece ayın ilk gününü içeren haftanın pazartesi tarihi hesaplanır ve SIRALI fonksiyonu pazartesiden pazara 7 tarih üretir.
9.2 Sonraki Haftalar
E6 hücresi
=SIRALI(1;7;K4+1)
İlk haftanın pazar gününden sonraki pazartesiyle başlar.
E8 hücresi
=SIRALI(1;7;K6+1)
İkinci haftanın pazarından sonraki pazartesiyle başlar.
E10 hücresi
=SIRALI(1;7;K8+1)
Üçüncü haftanın pazarından sonraki pazartesiyle başlar.
E12 hücresi
=SIRALI(1;7;K10+1)
Dördüncü haftanın pazarından sonraki pazartesiyle başlar.
9.3 Tarihlerin Yalnızca Gün Numarası Olarak Gösterilmesi
E4:K4, E6:K6, E8:K8, E10:K10 ve E12:K12 aralıklarına özel sayı biçimi olarak d uygulanmıştır. Hücrelerin gerçek değeri tam tarihtir; ekranda yalnızca 1, 2, 3 gibi gün numaraları görünür.
|
Dinamik dizi davranışı: Formülü yalnızca E4, E6, E8, E10 ve E12 başlangıç hücrelerine yazın. Sağdaki hücreleri elle doldurmayın; SIRALI sonucu K sütununa kadar otomatik taşar. |
10. Tarihe Bağlı Notların Takvimde Gösterilmesi
10.1 Kaynak Dosyadaki Formül Yapısı
E5 hücresi
=FİLTRE(Not;Tarih=E4;””)
Formül, Tarih tanımlanmış adındaki değerlerden E4 tarihine eşit olan satırları bulur ve aynı satırlardaki Not değerlerini döndürür. Eşleşme yoksa boş metin gösterilir.
1. E5 hücresine formülü yazın.
2. E5 hücresini sağa doğru K5’e kadar kopyalayın. Göreli tarih başvuruları F4, G4 … K4 olarak değişir.
3. E5:K5 aralığını E7:K7, E9:K9 ve E11:K11 satırlarına kopyalayın.
4. Her not satırı bir üstteki tarih satırını referans alır: 5→4, 7→6, 9→8, 11→10.
|
Not satırı |
Tarih satırı |
E sütunundaki formül |
|---|---|---|
|
E5:K5 |
E4:K4 |
=FİLTRE(Not;Tarih=E4;””) |
|
E7:K7 |
E6:K6 |
=FİLTRE(Not;Tarih=E6;””) |
|
E9:K9 |
E8:K8 |
=FİLTRE(Not;Tarih=E8;””) |
|
E11:K11 |
E10:K10 |
=FİLTRE(Not;Tarih=E10;””) |
|
E13:K13 |
E12:K12 |
Kaynak dosyada formül bulunmuyor |

Şekil 2 — FİLTRE formülünün takvimde not alanına girilmesi.
|
Kaynak dosyada tespit edilen eksiklik: E13:K13 aralığı biçimlendirilmiş olmasına rağmen bu hücrelerde FİLTRE formülü yoktur. Bu nedenle beşinci haftanın alt satırında notlar görünmez. |
10.2 Son Haftayı Tamamlamak İçin Önerilen Formül
E13 hücresi — kaynak dosyayı tamamlayan öneri
=FİLTRE(Not;Tarih=E12;””)
E13’e bu formülü yazıp K13’e kadar kopyalarsanız beşinci haftadaki etkinlikler de gösterilir. Bu formül kaynak dosyada mevcut değildir; çalışmanın bütünlüğü için önerilen tamamlamadır.
10.3 Aynı Tarihte Birden Fazla Not
FİLTRE aynı tarih için birden fazla sonuç bulursa sonuçları dikey taşır. Alt hücrelerde tarih veya başka formül bulunduğunda #TAŞMA! hatası oluşabilir. Kaynak dosyanın mevcut yapısında her tarih için tek not kullanmak en güvenli yöntemdir. Çoklu not ihtiyacı varsa METİNBİRLEŞTİR tabanlı alternatif ayrı bir geliştirme olarak ele alınmalıdır.
11. Koşullu Biçimlendirme Kuralları
11.1 Seçili Ay Dışındaki Günleri Soluklaştırma
Kaynak dosyada E4:K13 aralığına tek bir formül tabanlı koşullu biçimlendirme kuralı uygulanmıştır.
Koşullu biçimlendirme formülü
=AY(E4)<>AY($C$1&$C$4)
1. E4:K13 aralığını seçin.
2. Giriş → Koşullu Biçimlendirme → Yeni Kural yolunu izleyin.
3. “Biçimlendirilecek hücreleri belirlemek için formül kullan” seçeneğini seçin.
4. Formül alanına =AY(E4)<>AY($C$1&$C$4) yazın.
5. Biçim → Yazı Tipi → Renk bölümünde çok açık gri/beyaz tonu seçin. Kaynak dosyada tema beyazı %5 koyulaştırılmış yaklaşık #F2F2F2 kullanılır.
6. Uygulama alanını =$E$4:$K$13 olarak ayarlayın.

Şekil 3 — Seçili aya ait olmayan tarihleri soluklaştıran koşullu biçimlendirme kuralı.
Kural göreli başvuru olan E4 üzerinden tüm aralığa uygulanır. Hücrenin ayı, C1 ve C4 ile oluşturulan seçili ayın ay numarasından farklıysa yazı soluklaşır.
12. VBA Yapısının Kurulması
12.1 Bileşenler
|
Bileşen |
Oluşturma Yolu |
Ad |
|---|---|---|
|
Standart modül |
VBA Düzenleyicisi → Ekle → Modül |
modEtkinlikHatirlatici |
|
UserForm |
VBA Düzenleyicisi → Ekle → UserForm |
frmEtkinlikHatirlatici |
|
Çalışma kitabı modülü |
Microsoft Excel Nesneleri → BuÇalışmaKitabı |
BuÇalışmaKitabı |
UserForm üzerine Tasarım görünümünde Label, ListBox veya CommandButton eklenmez. Kaynak dosyada tüm kontroller çalışma zamanında Me.Controls.Add ile oluşturulur. Kullanıcının yapacağı işlem yalnızca boş UserForm oluşturmak, adını ayarlamak ve kodu formun kod penceresine yapıştırmaktır.
12.2 Veri Akışı
|
Aşama |
İşlem |
|---|---|
|
1 |
Workbook_Open veya SheetChange olayı YaklasanEtkinlikleriKontrolEt prosedürünü çağırır. |
|
2 |
EtkinlikVerileriniHazirla Notlar sayfasının D:E sütunlarını tarar. |
|
3 |
Bugün ile +7 gün arasındaki kayıtlar üç sütunlu bir diziye alınır. |
|
4 |
EtkinlikleriSirala diziyi tarihe göre artan şekilde sıralar. |
|
5 |
UserForm açılır veya açıksa VerileriYenile ile güncellenir. |
|
6 |
En yakın kayıt özet kartına, tüm kayıtlar ListBox’a yazılır. |
13. Standart Modül: modEtkinlikHatirlatici
13.1 Sabitler ve Genel Değişkenler
|
Sabit/Değişken |
Değer |
Görev |
|---|---|---|
|
ETKINLIK_SAYFA |
Notlar |
Verilerin okunacağı sayfa |
|
ETKINLIK_TARIH_SUTUNU |
4 |
D sütunu |
|
ETKINLIK_NOT_SUTUNU |
5 |
E sütunu |
|
ETKINLIK_ILK_SATIR |
2 |
Başlık sonrası ilk veri satırı |
|
ETKINLIK_UYARI_GUNU |
7 |
İleriye dönük kontrol süresi |
|
gEtkinlikler |
Variant dizi |
Formda gösterilecek kayıtlar |
|
gEtkinlikSayisi |
Long |
Yaklaşan kayıt sayısı |
13.2 Prosedürlerin Görevi
|
Prosedür |
Görev |
|---|---|
|
YaklasanEtkinlikleriKontrolEt |
Verileri hazırlar, kayıt yoksa formu kapatır veya bilgi verir, kayıt varsa formu modeless açar/günceller. |
|
EtkinlikVerileriniHazirla |
D:E sütunlarını iki tur tarar; uygun kayıt sayısını ve veri dizisini oluşturur. |
|
TarihDegeriniAl |
Hata, boşluk ve geçersiz tarihleri güvenli biçimde eler. |
|
EtkinlikleriSirala |
Kayıtları en yakın tarihten en uzağa sıralar. |
|
KalanGunMetni |
0→Bugün, 1→Yarın, diğer→n gün sonra metnini döndürür. |
|
FormYukluMu |
UserForm’un açık/yüklü olup olmadığını kontrol eder. |
|
EtkinlikHatirlaticisiniTestEt |
Elle test için ana kontrol prosedürünü çağırır. |
13.3 Tam Standart Modül Kodu
Ekle → Modül ile yeni standart modül oluşturun, Özellikler penceresindeki (Name) değerini modEtkinlikHatirlatici yapın ve aşağıdaki kodu yapıştırın.
Option Explicit
‘==============================================================================
‘ ETKİNLİK HATIRLATICISI – STANDART MODÜL
‘==============================================================================
Public Const ETKINLIK_SAYFA As String = “Notlar”
Public Const ETKINLIK_TARIH_SUTUNU As Long = 4 ‘ D sütunu
Public Const ETKINLIK_NOT_SUTUNU As Long = 5 ‘ E sütunu
Public Const ETKINLIK_ILK_SATIR As Long = 2
Public Const ETKINLIK_UYARI_GUNU As Long = 7
Public gEtkinlikler As Variant
Public gEtkinlikSayisi As Long
‘==============================================================================
‘ ANA KONTROL
‘==============================================================================
Public Sub YaklasanEtkinlikleriKontrolEt( _
Optional ByVal kayitYoksaBilgiVer As Boolean = False)
On Error GoTo Hata
EtkinlikVerileriniHazirla
If gEtkinlikSayisi = 0 Then
On Error Resume Next
If FormYukluMu(“frmEtkinlikHatirlatici”) Then
Unload frmEtkinlikHatirlatici
End If
On Error GoTo Hata
If kayitYoksaBilgiVer Then
MsgBox “Bugün ve önümüzdeki ” & _
CStr(ETKINLIK_UYARI_GUNU) & _
” gün içinde yaklaşan etkinlik bulunamadı.”, _
vbInformation, _
“Yaklaşan Etkinlikler”
End If
Exit Sub
End If
If FormYukluMu(“frmEtkinlikHatirlatici”) Then
frmEtkinlikHatirlatici.VerileriYenile
If frmEtkinlikHatirlatici.Visible = False Then
frmEtkinlikHatirlatici.Show vbModeless
End If
Else
frmEtkinlikHatirlatici.Show vbModeless
End If
Exit Sub
Hata:
MsgBox “Etkinlik hatırlatıcısı çalıştırılamadı.” & _
vbCrLf & vbCrLf & _
“Hata No: ” & Err.Number & vbCrLf & _
“Açıklama: ” & Err.Description, _
vbExclamation, _
“Etkinlik Hatırlatıcısı”
End Sub
‘==============================================================================
‘ D VE E SÜTUNLARINDAKİ ETKİNLİKLERİ HAZIRLA
‘==============================================================================
Public Sub EtkinlikVerileriniHazirla()
Dim ws As Worksheet
Dim sonSatir As Long
Dim satir As Long
Dim sira As Long
Dim etkinlikTarihi As Date
Dim kalanGun As Long
Dim notMetni As String
Dim sonuc() As Variant
On Error GoTo Hata
gEtkinlikSayisi = 0
gEtkinlikler = Empty
Set ws = ThisWorkbook.Worksheets(ETKINLIK_SAYFA)
sonSatir = ws.Cells( _
ws.Rows.Count, _
ETKINLIK_TARIH_SUTUNU).End(xlUp).Row
If sonSatir < ETKINLIK_ILK_SATIR Then Exit Sub
‘————————————————————————–
‘ Birinci tarama: Yaklaşan etkinlik sayısını bulur.
‘————————————————————————–
For satir = ETKINLIK_ILK_SATIR To sonSatir
If TarihDegeriniAl( _
ws.Cells(satir, ETKINLIK_TARIH_SUTUNU).Value, _
etkinlikTarihi) Then
kalanGun = DateDiff( _
“d”, _
Date, _
etkinlikTarihi)
If kalanGun >= 0 And _
kalanGun <= ETKINLIK_UYARI_GUNU Then
gEtkinlikSayisi = gEtkinlikSayisi + 1
End If
End If
Next satir
If gEtkinlikSayisi = 0 Then Exit Sub
ReDim sonuc(1 To gEtkinlikSayisi, 1 To 3)
‘————————————————————————–
‘ İkinci tarama: Verileri diziye aktarır.
‘————————————————————————–
sira = 0
For satir = ETKINLIK_ILK_SATIR To sonSatir
If TarihDegeriniAl( _
ws.Cells(satir, ETKINLIK_TARIH_SUTUNU).Value, _
etkinlikTarihi) Then
kalanGun = DateDiff( _
“d”, _
Date, _
etkinlikTarihi)
If kalanGun >= 0 And _
kalanGun <= ETKINLIK_UYARI_GUNU Then
sira = sira + 1
If IsError(ws.Cells( _
satir, _
ETKINLIK_NOT_SUTUNU).Value) Then
notMetni = “Açıklama okunamadı”
Else
notMetni = Trim$(CStr(ws.Cells( _
satir, _
ETKINLIK_NOT_SUTUNU).Value))
If Len(notMetni) = 0 Then
notMetni = “Açıklama girilmemiş”
End If
End If
sonuc(sira, 1) = etkinlikTarihi
sonuc(sira, 2) = notMetni
sonuc(sira, 3) = kalanGun
End If
End If
Next satir
EtkinlikleriSirala sonuc
gEtkinlikler = sonuc
Exit Sub
Hata:
gEtkinlikSayisi = 0
gEtkinlikler = Empty
Err.Raise Err.Number, _
“EtkinlikVerileriniHazirla”, _
Err.Description
End Sub
‘==============================================================================
‘ HÜCREDEKİ TARİHİ GÜVENLİ ŞEKİLDE AL
‘==============================================================================
Private Function TarihDegeriniAl( _
ByVal hucreDegeri As Variant, _
ByRef sonucTarih As Date) As Boolean
On Error GoTo GecersizTarih
TarihDegeriniAl = False
If IsError(hucreDegeri) Then Exit Function
If IsEmpty(hucreDegeri) Then Exit Function
If Len(Trim$(CStr(hucreDegeri))) = 0 Then Exit Function
If Not IsDate(hucreDegeri) Then Exit Function
sonucTarih = DateValue(CDate(hucreDegeri))
TarihDegeriniAl = True
Exit Function
GecersizTarih:
TarihDegeriniAl = False
End Function
‘==============================================================================
‘ ETKİNLİKLERİ EN YAKIN TARİHTEN EN UZAĞA SIRALA
‘==============================================================================
Private Sub EtkinlikleriSirala(ByRef veri As Variant)
Dim i As Long
Dim j As Long
Dim kolon As Long
Dim gecici As Variant
If Not IsArray(veri) Then Exit Sub
For i = 1 To UBound(veri, 1) – 1
For j = i + 1 To UBound(veri, 1)
If CDate(veri(j, 1)) < CDate(veri(i, 1)) Then
For kolon = 1 To 3
gecici = veri(i, kolon)
veri(i, kolon) = veri(j, kolon)
veri(j, kolon) = gecici
Next kolon
End If
Next j
Next i
End Sub
‘==============================================================================
‘ KALAN GÜN METNİ
‘==============================================================================
Public Function KalanGunMetni(ByVal kalanGun As Long) As String
Select Case kalanGun
Case 0
KalanGunMetni = “Bugün”
Case 1
KalanGunMetni = “Yarın”
Case Else
KalanGunMetni = CStr(kalanGun) & ” gün sonra”
End Select
End Function
‘==============================================================================
‘ FORM YÜKLÜ MÜ?
‘==============================================================================
Private Function FormYukluMu(ByVal formAdi As String) As Boolean
Dim frm As Object
FormYukluMu = False
For Each frm In VBA.UserForms
If StrComp(TypeName(frm), formAdi, vbTextCompare) = 0 Then
FormYukluMu = True
Exit Function
End If
Next frm
End Function
‘==============================================================================
‘ MANUEL TEST
‘==============================================================================
Public Sub EtkinlikHatirlaticisiniTestEt()
YaklasanEtkinlikleriKontrolEt True
End Sub
14. UserForm: frmEtkinlikHatirlatici
14.1 Boş Formun Oluşturulması
1. VBA Düzenleyicisinde Ekle → UserForm seçin.
2. Özellikler penceresinde (Name) değerini frmEtkinlikHatirlatici olarak değiştirin.
3. Formun üzerine herhangi bir kontrol yerleştirmeyin.
4. F7 ile kod penceresini açın ve mevcut kodu temizleyerek tam UserForm kodunu yapıştırın.
14.2 Form Boyutları ve Renkleri
|
Öğe |
Değer |
|---|---|
|
Form başlığı |
Yaklaşan Etkinlikler |
|
Genişlik / Yükseklik |
700 / 525 point |
|
Form arka planı |
RGB(244,247,251) / #F4F7FB |
|
Üst alan |
RGB(31,52,89) / #1F3459 |
|
Sayaç ve yenile butonu |
RGB(64,112,160) / #4070A0 |
|
Vurgu turuncusu |
RGB(242,153,74) / #F2994A |
|
Durum yeşili |
RGB(47,158,107) / #2F9E6B |
|
Acil durum kırmızısı |
RGB(214,69,65) / #D64541 |
|
Sütun başlığı mavisi |
RGB(47,87,135) / #2F5787 |
|
Yazı tipi |
Segoe UI |
14.3 Çalışma Zamanında Oluşturulan Kontroller
|
Kontrol grubu |
İçerik |
|---|---|
|
Üst başlık |
Arka plan, ana başlık, alt başlık ve etkinlik sayacı |
|
En yakın etkinlik kartı |
Tarih, açıklama ve kalan süre etiketi |
|
Liste başlığı |
Lacivert şerit, turuncu vurgu ve bölüm başlığı |
|
Sütun başlıkları |
TARİH, KALAN SÜRE, ETKİNLİK AÇIKLAMASI |
|
Liste |
3 sütunlu ListBox; sütun genişlikleri 105 pt, 120 pt, 385 pt |
|
Alt alan |
Bilgi metni, Listeyi Yenile ve Kapat butonları |

Şekil 4 — Yaklaşan Etkinlikler UserForm ekranı.
14.4 Renk Değiştiren Kalan Süre Kutusu
|
Kalan gün |
Arka plan |
|---|---|
|
0 — Bugün |
#D64541 kırmızı |
|
1–2 gün |
#F2994A turuncu |
|
3–7 gün |
#2F9E6B yeşil |
|
Kayıt yok |
#6F7A8A gri |
14.5 Tam UserForm Kodu
Option Explicit
‘==============================================================================
‘ ETKİNLİK HATIRLATICISI USERFORM
‘==============================================================================
Private WithEvents cmdKapat As MSForms.CommandButton
Private WithEvents cmdYenile As MSForms.CommandButton
Private lstEtkinlikler As MSForms.ListBox
Private lblSayac As MSForms.Label
Private lblSonrakiTarih As MSForms.Label
Private lblSonrakiNot As MSForms.Label
Private lblSonrakiKalan As MSForms.Label
Private mArayuzOlusturuldu As Boolean
Private mAsama As String
‘==============================================================================
‘ FORM AÇILIŞI
‘==============================================================================
Private Sub UserForm_Initialize()
On Error GoTo Hata
mAsama = “Form ayarları”
FormuAyarla
mAsama = “Arayüz bileşenleri”
ArayuzuOlustur
mAsama = “Etkinlik verileri”
VerileriYenile
mAsama = vbNullString
Exit Sub
Hata:
MsgBox “Etkinlik formu hazırlanırken hata oluştu.” & _
vbCrLf & vbCrLf & _
“Aşama: ” & mAsama & vbCrLf & _
“Hata No: ” & Err.Number & vbCrLf & _
“Açıklama: ” & Err.Description, _
vbExclamation, _
“Form Hatası”
End Sub
‘==============================================================================
‘ FORM AYARLARI
‘==============================================================================
Private Sub FormuAyarla()
With Me
.Caption = “Yaklaşan Etkinlikler”
.Width = 700
.Height = 525
.BackColor = RGB(244, 247, 251)
End With
End Sub
‘==============================================================================
‘ ARAYÜZÜ OLUŞTUR
‘==============================================================================
Private Sub ArayuzuOlustur()
Dim lbl As MSForms.Label
If mArayuzOlusturuldu Then Exit Sub
‘————————————————————————–
‘ Üst lacivert alan
‘————————————————————————–
mAsama = “Üst başlık alanı”
Set lbl = EtiketOlustur( _
“lblUstArkaPlan”, _
vbNullString, _
0, _
0, _
660, _
82)
lbl.BackColor = RGB(31, 52, 89)
‘————————————————————————–
‘ Ana başlık
‘————————————————————————–
Set lbl = EtiketOlustur( _
“lblAnaBaslik”, _
“YAKLAŞAN ETKİNLİKLER”, _
24, _
16, _
410, _
27)
With lbl
.BackStyle = fmBackStyleTransparent
.ForeColor = RGB(255, 255, 255)
.Font.Name = “Segoe UI”
.Font.Size = 16
.Font.Bold = True
End With
‘————————————————————————–
‘ Alt başlık
‘————————————————————————–
Set lbl = EtiketOlustur( _
“lblAltBaslik”, _
“Bugün ve önümüzdeki ” & _
CStr(ETKINLIK_UYARI_GUNU) & _
” gün içindeki kayıtlar”, _
25, _
48, _
420, _
18)
With lbl
.BackStyle = fmBackStyleTransparent
.ForeColor = RGB(207, 220, 239)
.Font.Name = “Segoe UI”
.Font.Size = 9
End With
‘————————————————————————–
‘ Etkinlik sayacı
‘————————————————————————–
Set lblSayac = EtiketOlustur( _
“lblSayac”, _
“0 ETKİNLİK”, _
515, _
31, _
120, _
34)
With lblSayac
.BackColor = RGB(64, 112, 160)
.ForeColor = RGB(255, 255, 255)
.Font.Name = “Segoe UI”
.Font.Size = 9
.Font.Bold = True
.TextAlign = fmTextAlignCenter
End With
‘————————————————————————–
‘ En yakın etkinlik kartı
‘————————————————————————–
mAsama = “En yakın etkinlik kartı”
Set lbl = EtiketOlustur( _
“lblOzetArkaPlan”, _
vbNullString, _
24, _
98, _
612, _
80)
lbl.BackColor = RGB(255, 255, 255)
‘————————————————————————–
‘ Kart başlığı
‘————————————————————————–
Set lbl = EtiketOlustur( _
“lblOzetBaslik”, _
“EN YAKIN ETKİNLİK”, _
42, _
109, _
250, _
16)
With lbl
.BackStyle = fmBackStyleTransparent
.ForeColor = RGB(64, 112, 160)
.Font.Name = “Segoe UI”
.Font.Size = 8
.Font.Bold = True
End With
‘————————————————————————–
‘ En yakın tarih
‘————————————————————————–
Set lblSonrakiTarih = EtiketOlustur( _
“lblSonrakiTarih”, _
“-“, _
42, _
132, _
105, _
25)
With lblSonrakiTarih
.BackStyle = fmBackStyleTransparent
.ForeColor = RGB(31, 52, 89)
.Font.Name = “Segoe UI”
.Font.Size = 12
.Font.Bold = True
End With
‘————————————————————————–
‘ En yakın etkinlik açıklaması
‘————————————————————————–
Set lblSonrakiNot = EtiketOlustur( _
“lblSonrakiNot”, _
“-“, _
155, _
128, _
335, _
42)
With lblSonrakiNot
.BackStyle = fmBackStyleTransparent
.ForeColor = RGB(65, 76, 92)
.Font.Name = “Segoe UI”
.Font.Size = 10
.WordWrap = True
End With
‘————————————————————————–
‘ Kalan süre kutusu
‘————————————————————————–
Set lblSonrakiKalan = EtiketOlustur( _
“lblSonrakiKalan”, _
“-“, _
510, _
131, _
110, _
18)
With lblSonrakiKalan
.BackColor = RGB(47, 158, 107)
.ForeColor = RGB(255, 255, 255)
.Font.Name = “Segoe UI”
.Font.Size = 9
.Font.Bold = True
.TextAlign = fmTextAlignCenter
End With
‘————————————————————————–
‘ ETKİNLİK LİSTESİ BÖLÜM BAŞLIĞI
‘————————————————————————–
mAsama = “Etkinlik listesi başlığı”
Set lbl = EtiketOlustur( _
“lblListeBaslikArkaPlan”, _
vbNullString, _
24, _
195, _
612, _
32)
lbl.BackColor = RGB(31, 52, 89)
‘ Sol turuncu vurgu çizgisi
Set lbl = EtiketOlustur( _
“lblListeVurgu”, _
vbNullString, _
24, _
195, _
6, _
32)
lbl.BackColor = RGB(242, 153, 74)
‘ Bölüm başlığı
Set lbl = EtiketOlustur( _
“lblListeBaslik”, _
“ETKİNLİK LİSTESİ”, _
42, _
202, _
260, _
20)
With lbl
.BackStyle = fmBackStyleTransparent
.ForeColor = RGB(255, 255, 255)
.Font.Name = “Segoe UI”
.Font.Size = 10
.Font.Bold = True
.TextAlign = fmTextAlignLeft
End With
‘————————————————————————–
‘ Sütun başlıkları
‘————————————————————————–
KolonBasligiOlustur _
“lblBaslikTarih”, _
“TARİH”, _
24, _
230, _
105, _
28
KolonBasligiOlustur _
“lblBaslikKalan”, _
“KALAN SÜRE”, _
129, _
230, _
120, _
28
KolonBasligiOlustur _
“lblBaslikNot”, _
“ETKİNLİK AÇIKLAMASI”, _
249, _
230, _
385, _
28
‘————————————————————————–
‘ Etkinlik ListBox
‘————————————————————————–
mAsama = “Etkinlik listesi”
Set lstEtkinlikler = Me.Controls.Add( _
“Forms.ListBox.1”, _
“lstEtkinlikler”, _
True)
With lstEtkinlikler
.Left = 24
.Top = 258
.Width = 612
.Height = 157
.ColumnCount = 3
.ColumnWidths = “105 pt;120 pt;385 pt”
.Font.Name = “Segoe UI”
.Font.Size = 10.5
.Font.Bold = False
.BackColor = RGB(250, 252, 255)
.ForeColor = RGB(31, 52, 89)
End With
‘————————————————————————–
‘ Alt bilgi
‘————————————————————————–
Set lbl = EtiketOlustur( _
“lblBilgi”, _
“Geçmiş tarihli kayıtlar gösterilmez. ” & _
“Liste en yakın tarihten başlayarak sıralanır.”, _
24, _
423, _
612, _
18)
With lbl
.BackStyle = fmBackStyleTransparent
.ForeColor = RGB(91, 105, 124)
.Font.Name = “Segoe UI”
.Font.Size = 8.5
End With
‘————————————————————————–
‘ Yenile butonu
‘————————————————————————–
mAsama = “Yenile butonu”
Set cmdYenile = Me.Controls.Add( _
“Forms.CommandButton.1”, _
“cmdYenile”, _
True)
With cmdYenile
.Caption = “Listeyi Yenile”
.Left = 24
.Top = 452
.Width = 125
.Height = 32
.BackColor = RGB(64, 112, 160)
.ForeColor = RGB(255, 255, 255)
.Font.Name = “Segoe UI”
.Font.Size = 9
.Font.Bold = True
End With
‘————————————————————————–
‘ Kapat butonu
‘————————————————————————–
mAsama = “Kapat butonu”
Set cmdKapat = Me.Controls.Add( _
“Forms.CommandButton.1”, _
“cmdKapat”, _
True)
With cmdKapat
.Caption = “Kapat”
.Left = 511
.Top = 452
.Width = 125
.Height = 32
.BackColor = RGB(31, 52, 89)
.ForeColor = RGB(255, 255, 255)
.Font.Name = “Segoe UI”
.Font.Size = 9
.Font.Bold = True
End With
mArayuzOlusturuldu = True
End Sub
‘==============================================================================
‘ VERİLERİ FORMA YÜKLE
‘==============================================================================
Public Sub VerileriYenile()
Dim i As Long
Dim listeSatiri As Long
Dim kalanGun As Long
On Error GoTo Hata
If lstEtkinlikler Is Nothing Then Exit Sub
lstEtkinlikler.Clear
If gEtkinlikSayisi <= 0 Then
BosKayitGoster
Exit Sub
End If
If Not IsArray(gEtkinlikler) Then
BosKayitGoster
Exit Sub
End If
lblSayac.Caption = CStr(gEtkinlikSayisi) & ” ETKİNLİK”
lblSonrakiTarih.Caption = _
Format$(CDate(gEtkinlikler(1, 1)), “dd.mm.yyyy”)
lblSonrakiNot.Caption = _
CStr(gEtkinlikler(1, 2))
kalanGun = CLng(gEtkinlikler(1, 3))
lblSonrakiKalan.Caption = KalanGunMetni(kalanGun)
Select Case kalanGun
Case 0
lblSonrakiKalan.BackColor = RGB(214, 69, 65)
Case 1 To 2
lblSonrakiKalan.BackColor = RGB(242, 153, 74)
Case Else
lblSonrakiKalan.BackColor = RGB(47, 158, 107)
End Select
For i = 1 To gEtkinlikSayisi
lstEtkinlikler.AddItem _
Format$(CDate(gEtkinlikler(i, 1)), “dd.mm.yyyy”)
listeSatiri = lstEtkinlikler.ListCount – 1
lstEtkinlikler.List(listeSatiri, 1) = _
KalanGunMetni(CLng(gEtkinlikler(i, 3)))
lstEtkinlikler.List(listeSatiri, 2) = _
CStr(gEtkinlikler(i, 2))
Next i
‘ Form açıldığında hiçbir satır seçili gelmez.
If lstEtkinlikler.ListCount > 0 Then
lstEtkinlikler.ListIndex = -1
End If
Exit Sub
Hata:
MsgBox “Etkinlik verileri forma aktarılamadı.” & _
vbCrLf & vbCrLf & _
“Hata No: ” & Err.Number & vbCrLf & _
“Açıklama: ” & Err.Description, _
vbExclamation, _
“Veri Yükleme Hatası”
End Sub
‘==============================================================================
‘ BOŞ KAYIT GÖRÜNÜMÜ
‘==============================================================================
Private Sub BosKayitGoster()
Dim listeSatiri As Long
lblSayac.Caption = “0 ETKİNLİK”
lblSonrakiTarih.Caption = “-”
lblSonrakiNot.Caption = _
“Önümüzdeki ” & _
CStr(ETKINLIK_UYARI_GUNU) & _
” gün içinde yaklaşan etkinlik bulunamadı.”
lblSonrakiKalan.Caption = “KAYIT YOK”
lblSonrakiKalan.BackColor = RGB(111, 122, 138)
lstEtkinlikler.AddItem “-”
listeSatiri = lstEtkinlikler.ListCount – 1
lstEtkinlikler.List(listeSatiri, 1) = “-”
lstEtkinlikler.List(listeSatiri, 2) = _
“Yaklaşan etkinlik bulunamadı.”
lstEtkinlikler.ListIndex = -1
End Sub
‘==============================================================================
‘ YENİLE BUTONU
‘==============================================================================
Private Sub cmdYenile_Click()
On Error GoTo Hata
EtkinlikVerileriniHazirla
VerileriYenile
Exit Sub
Hata:
MsgBox “Etkinlik listesi yenilenemedi.” & _
vbCrLf & vbCrLf & _
“Hata No: ” & Err.Number & vbCrLf & _
“Açıklama: ” & Err.Description, _
vbExclamation, _
“Liste Yenileme Hatası”
End Sub
‘==============================================================================
‘ KAPAT BUTONU
‘==============================================================================
Private Sub cmdKapat_Click()
Unload Me
End Sub
‘==============================================================================
‘ DİNAMİK ETİKET OLUŞTUR
‘==============================================================================
Private Function EtiketOlustur( _
ByVal kontrolAdi As String, _
ByVal metin As String, _
ByVal sol As Single, _
ByVal ust As Single, _
ByVal genislik As Single, _
ByVal yukseklik As Single) As MSForms.Label
Dim lbl As MSForms.Label
Set lbl = Me.Controls.Add( _
“Forms.Label.1”, _
kontrolAdi, _
True)
With lbl
.Caption = metin
.Left = sol
.Top = ust
.Width = genislik
.Height = yukseklik
.BackColor = RGB(255, 255, 255)
.ForeColor = RGB(48, 58, 73)
.Font.Name = “Segoe UI”
.Font.Size = 9
End With
Set EtiketOlustur = lbl
End Function
‘==============================================================================
‘ SÜTUN BAŞLIĞI OLUŞTUR
‘==============================================================================
Private Sub KolonBasligiOlustur( _
ByVal kontrolAdi As String, _
ByVal metin As String, _
ByVal sol As Single, _
ByVal ust As Single, _
ByVal genislik As Single, _
ByVal yukseklik As Single)
Dim lbl As MSForms.Label
Set lbl = EtiketOlustur( _
kontrolAdi, _
metin, _
sol, _
ust + 6, _
genislik, _
16)
With lbl
.BackColor = RGB(47, 87, 135)
.ForeColor = RGB(255, 255, 255)
.Font.Name = “Segoe UI”
.Font.Size = 9
.Font.Bold = True
.Caption = Space$(3) & metin
.TextAlign = fmTextAlignLeft
End With
End Sub
15. BuÇalışmaKitabı Olay Kodları
15.1 Workbook_Open
Dosya açıldığında YaklasanEtkinlikleriKontrolEt False çağrılır. Uygun kayıt varsa form açılır; kayıt yoksa sessizce devam edilir.
15.2 Workbook_SheetChange
Notlar sayfasında D veya E sütunundaki bir hücre değiştiğinde etkinlik kontrolü yeniden çalışır. Böylece tarih veya açıklama eklendikten sonra açık form güncel veriyi gösterebilir.
15.3 Tam Çalışma Kitabı Kodu
VBA Proje Gezgini’nde BuÇalışmaKitabı nesnesine çift tıklayın ve aşağıdaki kodu yapıştırın.
Option Explicit
‘==============================================================================
‘ DOSYA AÇILDIĞINDA ETKİNLİKLERİ KONTROL ET
‘==============================================================================
Private Sub Workbook_Open()
On Error GoTo Cikis
YaklasanEtkinlikleriKontrolEt False
Cikis:
End Sub
‘==============================================================================
‘ NOTLAR SAYFASINDA D VEYA E SÜTUNU DEĞİŞİNCE KONTROL ET
‘==============================================================================
Private Sub Workbook_SheetChange( _
ByVal Sh As Object, _
ByVal Target As Range)
Dim kontrolAlani As Range
On Error GoTo Cikis
If Sh.Name <> ETKINLIK_SAYFA Then Exit Sub
Set kontrolAlani = Sh.Range( _
“D” & ETKINLIK_ILK_SATIR & _
“:E” & Sh.Rows.Count)
If Intersect(Target, kontrolAlani) Is Nothing Then Exit Sub
YaklasanEtkinlikleriKontrolEt False
Cikis:
End Sub
|
Sayfa modülleri: Kaynak dosyada Sayfa1 ve Sayfa2 modüllerinde olay kodu bulunmamaktadır. Kod eklenmesi gereken yerler standart modül, UserForm ve BuÇalışmaKitabı modülüdür. |
16. Sistemin Test Edilmesi
16.1 Formülleri Test Etme
1. Takvim sayfasında ayı Haz, yılı 2026 seçin.
2. E4:K4 satırının 1–7 Haziran tarihlerini göstermesini kontrol edin.
3. Sonraki tarih satırlarının 8–14, 15–21, 22–28 ve 29 Haziran–5 Temmuz şeklinde devam ettiğini doğrulayın.
4. Temmuz günlerinin koşullu biçimlendirme ile soluk görünmesini kontrol edin.
5. Notlar sayfasına 24.06.2026 / Kamera alınacak kaydı girin ve G11 hücresinde görünmesini doğrulayın.
16.2 VBA Formunu Manuel Test Etme
1. Notlar sayfasına bugün veya önümüzdeki 7 gün içinde en az bir tarih ekleyin.
2. Alt+F8 tuşlarına basın.
3. EtkinlikHatirlaticisiniTestEt makrosunu seçip Çalıştır düğmesine basın.
4. Formda etkinlik sayısı, en yakın kayıt ve liste satırlarını kontrol edin.
5. Listeyi Yenile butonuna basarak verilerin yeniden okunmasını test edin.
6. Kapat butonunun formu kapattığını doğrulayın.
16.3 Dosya Açılış Testi
1. Dosyayı kaydedip kapatın.
2. Dosyayı yeniden açın ve güvenlik uyarısı varsa İçeriği Etkinleştir seçeneğini kullanın.
3. Yaklaşan kayıt varsa UserForm’un otomatik açıldığını doğrulayın.
4. Yaklaşan kayıt yoksa formun açılmamasının normal olduğunu unutmayın.
17. Günlük Kullanım Rehberi
1. Notlar sayfasında tablonun son satırına tarih ve açıklama ekleyin.
2. Takvim sayfasına geçin ve açılır listelerden ay ile yılı seçin.
3. İlgili güne ait açıklamanın tarih satırının altındaki hücrede göründüğünü kontrol edin.
4. Yaklaşan etkinlik ekranını elle görmek için Alt+F8 → EtkinlikHatirlaticisiniTestEt yolunu kullanın.
5. Form açıkken yeni kayıt eklediğinizde Listeyi Yenile düğmesini kullanabilir veya D/E sütunundaki değişikliğin tetiklediği otomatik yenilemeyi bekleyebilirsiniz.
6. Çalışmayı tamamladığınızda dosyayı .xlsm biçiminde kaydedin.
17.1 Etkinlik Listesinin Sıralaması
Kod tarihleri DateDiff ile değerlendirir ve EtkinlikleriSirala prosedüründeki karşılaştırma ile artan tarihe göre sıralar. Aynı tarihli kayıtların kendi aralarındaki özgün satır sırası korunması garanti edilmez; yalnızca tarih önceliği hedeflenir.
18. Sorun Giderme
|
Sorun |
Muhtemel neden |
Çözüm |
|---|---|---|
|
#AD? / fonksiyon tanınmıyor |
Excel sürümü SIRALI veya FİLTRE desteklemiyor |
Microsoft 365 veya Excel 2021+ kullanın. |
|
#TAŞMA! |
Dinamik dizi alanında dolu hücre var veya aynı tarihte birden fazla not döndü |
Taşma alanını boşaltın; her tarih için tek not kullanın veya formülü yeniden tasarlayın. |
|
Not görünmüyor |
Tarih metin olarak girilmiş, tanımlanmış ad eksik veya E13:K13 formülsüz |
Tarihi gerçek tarih yapın; Ad Yöneticisini kontrol edin; son satır için önerilen formülü ekleyin. |
|
Form açılmıyor |
Makrolar kapalı, dosya .xlsx, modül/form adı yanlış |
Makroları etkinleştirin; .xlsm kaydedin; adları birebir kontrol edin. |
|
“Sub or Function not defined” |
Standart modül kodu eksik veya modül adı/konumu yanlış |
modEtkinlikHatirlatici kodunu standart modüle eksiksiz yapıştırın. |
|
User-defined type not defined |
Kod yanlış nesneye yapıştırılmış veya MSForms ortamı yüklenmemiş |
Kodu Excel Windows masaüstü VBA’sında, UserForm kod penceresinde kullanın. |
|
Liste boş |
Bugün–+7 gün aralığında kayıt yok |
Test için uygun tarih ekleyin veya makroyu kayıt yok mesajıyla çalıştırın. |
|
Yanlış ay günleri |
Ay kısaltması yerel Excel tarafından tarih olarak yorumlanmıyor |
Türkçe Excel/Windows tarih ayarlarını kullanın veya başlangıç formülünü TARİH fonksiyonuyla yeniden tasarlayın. |
18.1 VBA Hata Mesajlarının Okunması
Kod, ana kontrol, veri hazırlama, form başlatma, veri yükleme ve yenileme aşamalarında hata numarası ile açıklamayı kullanıcıya gösterir. Hata mesajındaki “Aşama” bilgisi özellikle UserForm’un hangi bölümünde sorun oluştuğunu belirlemeyi kolaylaştırır.
19. Teknik Sınırlamalar ve İyileştirme Notları
|
Konu |
Kaynak dosyanın durumu |
Etkisi / öneri |
|---|---|---|
|
Takvim hafta sayısı |
5 hafta |
Bazı aylar altıncı takvim satırına ihtiyaç duyabilir; kaynak dosya bu günleri göstermez. |
|
Son not satırı |
E13:K13 formülsüz |
Beşinci hafta notları görünmez; bölüm 10.2’deki öneriyle tamamlanabilir. |
|
Tanımlanmış ad kapsamı |
D:D ve E:E tam sütun |
Çok büyük veri setlerinde hesaplama yükü artabilir. |
|
Aynı gün çoklu kayıt |
FİLTRE birden fazla satır döndürebilir |
Alt hücreler doluysa #TAŞMA! riski vardır. |
|
Ay metni |
Türkçe üç harfli ay kısaltması |
Farklı dil/bölge ayarlarında tarih oluşturma başarısız olabilir. |
|
Yıl aralığı |
2026–2036 sabit liste |
Daha ileri yıllar için veri doğrulama kaynağı güncellenmelidir. |
|
UserForm platformu |
MSForms kullanır |
Mac Excel veya Excel Online üzerinde aynı davranış garanti edilmez. |
|
Şeffaflık notu: Bu bölümdeki sınırlamalar kaynak dosyada yapılan doğrudan teknik incelemenin sonucudur. Kılavuz, sistemin mevcut yapısını öğretirken kullanıcıların karşılaşabileceği gerçek riskleri de açıkça belirtir. |
20. Ekler
Ek A — Formül Haritası
|
Hücre/Aralık |
Türkçe Excel formülü / içerik |
|---|---|
|
E4 |
=SIRALI(1;7;(1&C1&C4)-HAFTANINGÜNÜ((1&C1&C4);2)+1) |
|
E6 |
=SIRALI(1;7;K4+1) |
|
E8 |
=SIRALI(1;7;K6+1) |
|
E10 |
=SIRALI(1;7;K8+1) |
|
E12 |
=SIRALI(1;7;K10+1) |
|
E5:K5 |
=FİLTRE(Not;Tarih=<üstteki tarih hücresi>;””) |
|
E7:K7 |
=FİLTRE(Not;Tarih=<üstteki tarih hücresi>;””) |
|
E9:K9 |
=FİLTRE(Not;Tarih=<üstteki tarih hücresi>;””) |
|
E11:K11 |
=FİLTRE(Not;Tarih=<üstteki tarih hücresi>;””) |
|
E13:K13 |
Kaynak dosyada formül yok; öneri: =FİLTRE(Not;Tarih=E12;””) ve sağa kopyala |
|
Koşullu biçimlendirme |
=AY(E4)<>AY($C$1&$C$4) — uygulama: $E$4:$K$13 |
Ek B — VBA Bileşen Haritası
|
Dosya içindeki bileşen |
Tür |
Kod durumu |
|---|---|---|
|
BuÇalışmaKitabı |
Workbook sınıf modülü |
Workbook_Open ve Workbook_SheetChange kodları var |
|
Sayfa1 |
Takvim sayfa modülü |
Boş |
|
Sayfa2 |
Notlar sayfa modülü |
Boş |
|
modEtkinlikHatirlatici |
Standart modül |
Etkinlik okuma, filtreleme, sıralama ve form açma kodları var |
|
frmEtkinlikHatirlatici |
UserForm |
Arayüz ve kontroller çalışma zamanında oluşturuluyor |
Ek C — Hızlı Kurulum Kontrol Listesi
- Dosya .xlsm olarak kaydedildi.
- Sayfalar Takvim ve Notlar olarak adlandırıldı.
- Notlar!D1:E55 aralığı Tablo1 yapıldı.
- Tarih, Not ve Notlar tanımlanmış adları oluşturuldu.
- Ay ve yıl veri doğrulamaları eklendi.
- SIRALI formülleri E4, E6, E8, E10 ve E12’ye yazıldı.
- FİLTRE formülleri kaynak dosyadaki E5:K11 alanına uygulandı.
- Koşullu biçimlendirme E4:K13 alanına eklendi.
- modEtkinlikHatirlatici standart modülü oluşturuldu.
- frmEtkinlikHatirlatici boş UserForm’u oluşturuldu ve kod yapıştırıldı.
- BuÇalışmaKitabı olay kodları eklendi.
- EtkinlikHatirlaticisiniTestEt makrosu çalıştırıldı.
- Dosya kapatılıp yeniden açılarak otomatik uyarı test edildi.

