Excel TAKVİMLİ NOTLAR VE ETKİNLİK HATIRLATICISI

TAKVİMLİ NOTLAR VE
ETKİNLİK HATIRLATICISI

Excel ve VBA ile Sıfırdan Yapım Kılavuzu

Kaynak Excel çalışma kitabındaki aylık takvim görünümü

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

Doküman Hakkında 1

İçindekiler 1

1. Uygulama Ne İşe Yarar? 1

1.1 Çözdüğü Problem 1

1.2 Bileşenlerin Görevi 1

1.3 Tarih Aralığının Yorumu 1

2. Teknik İnceleme Özeti 1

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

4.1 Sayfa Kod Adları 1

5. Notlar Sayfasının Hazırlanması 1

5.1 Hücre Yerleşimi 1

5.2 Örnek Kayıtların Girilmesi 1

5.3 Aralığı Excel Tablosuna Dönüştürme 1

5.4 Tanımlanmış Adlar 1

6. Takvim Sayfasının Tasarımı 1

6.1 Ana Yerleşim 1

6.2 Birleştirilmiş Hücreler 1

6.3 Satır Yükseklikleri ve Sütun Genişlikleri 1

6.4 Renk Paleti 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.2 Sonraki Haftalar 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

12. VBA Yapısının Kurulması 1

12.1 Bileşenler 1

12.2 Veri Akışı 1

13. Standart Modül: modEtkinlikHatirlatici 1

13.1 Sabitler ve Genel Değişkenler 1

13.2 Prosedürlerin Görevi 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

14.5 Tam UserForm Kodu 1

15. BuÇalışmaKitabı Olay Kodları 1

15.1 Workbook_Open 1

15.2 Workbook_SheetChange 1

15.3 Tam Çalışma Kitabı Kodu 1

16. Sistemin Test Edilmesi 1

16.1 Formülleri Test Etme 1

16.2 VBA Formunu Manuel Test Etme 1

16.3 Dosya Açılış Testi 1

17. Günlük Kullanım Rehberi 1

17.1 Etkinlik Listesinin Sıralaması 1

18. Sorun Giderme 1

18.1 VBA Hata Mesajlarının Okunması 1

19. Teknik Sınırlamalar ve İyileştirme Notları 1

20. Ekler 1

Ek A — Formül Haritası 1

Ek B — VBA Bileşen Haritası 1

Ek C — Hızlı Kurulum Kontrol Listesi 1

Sonuç 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

Ay/yıl seçimi, gün başlıkları, takvim günleri, hafta sonları ve etkinlik açıklamaları görünen Excel ekranı

Ş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

Excel formül çubuğunda FİLTRE formülü ve takvim görünümü

Ş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.

Koşullu biçimlendirme kural düzenleme penceresi ve Takvim sayfası

Ş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ı

Yaklaşan etkinliklerin tarih, kalan süre ve açıklama sütunlarıyla gösterildiği kurumsal UserForm

Ş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
ETKİNLİK HATIRLATICISI

Excel ve VBA ile Sıfırdan Yapım Kılavuzu

     

Kaynak Excel çalışma kitabındaki aylık takvim görünümü

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

Doküman Hakkında 1

İçindekiler 1

1. Uygulama Ne İşe Yarar? 1

1.1 Çözdüğü Problem 1

1.2 Bileşenlerin Görevi 1

1.3 Tarih Aralığının Yorumu 1

2. Teknik İnceleme Özeti 1

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

4.1 Sayfa Kod Adları 1

5. Notlar Sayfasının Hazırlanması 1

5.1 Hücre Yerleşimi 1

5.2 Örnek Kayıtların Girilmesi 1

5.3 Aralığı Excel Tablosuna Dönüştürme 1

5.4 Tanımlanmış Adlar 1

6. Takvim Sayfasının Tasarımı 1

6.1 Ana Yerleşim 1

6.2 Birleştirilmiş Hücreler 1

6.3 Satır Yükseklikleri ve Sütun Genişlikleri 1

6.4 Renk Paleti 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.2 Sonraki Haftalar 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

12. VBA Yapısının Kurulması 1

12.1 Bileşenler 1

12.2 Veri Akışı 1

13. Standart Modül: modEtkinlikHatirlatici 1

13.1 Sabitler ve Genel Değişkenler 1

13.2 Prosedürlerin Görevi 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

14.5 Tam UserForm Kodu 1

15. BuÇalışmaKitabı Olay Kodları 1

15.1 Workbook_Open 1

15.2 Workbook_SheetChange 1

15.3 Tam Çalışma Kitabı Kodu 1

16. Sistemin Test Edilmesi 1

16.1 Formülleri Test Etme 1

16.2 VBA Formunu Manuel Test Etme 1

16.3 Dosya Açılış Testi 1

17. Günlük Kullanım Rehberi 1

17.1 Etkinlik Listesinin Sıralaması 1

18. Sorun Giderme 1

18.1 VBA Hata Mesajlarının Okunması 1

19. Teknik Sınırlamalar ve İyileştirme Notları 1

20. Ekler 1

Ek A — Formül Haritası 1

Ek B — VBA Bileşen Haritası 1

Ek C — Hızlı Kurulum Kontrol Listesi 1

Sonuç 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

Ay/yıl seçimi, gün başlıkları, takvim günleri, hafta sonları ve etkinlik açıklamaları görünen Excel ekranı

Ş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

Excel formül çubuğunda FİLTRE formülü ve takvim görünümü

Ş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.

Koşullu biçimlendirme kural düzenleme penceresi ve Takvim sayfası

Ş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ı

Yaklaşan etkinliklerin tarih, kalan süre ve açıklama sütunlarıyla gösterildiği kurumsal UserForm

Ş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.