Özellik ikonu

Worksheet.Protect

İndirme izni yok

Genel Bakış

Worksheet.Protect (Worksheet.Protect method), bir çalışma sayfasını değişikliklere karşı koruyan yöntemdir. Kilitli hücreler, çizim nesneleri ve senaryolar bu yöntemle düzenlemeye kapatılır; isterseniz parola koyabilir, sıralama, filtreleme ve biçimlendirme gibi işlemlere ayrıca izin verebilirsiniz. Menüdeki Gözden Geçir > Koru > Sayfayı Koru (Review > Protect > Protect Sheet) komutunun VBA karşılığıdır.

Söz dizimi​

Yöntemin genel biçimi aşağıdadır. Tüm parametreler isteğe bağlıdır; çoğunlukla adlandırılmış bağımsız değişkenlerle kullanılır.
VBA
ifade.Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables)
  • Password: Korumayı kaldırırken istenecek parola (metin). İsteğe bağlıdır; atlanırsa sayfa parolasız korunur ve herkes korumayı kaldırabilir.
  • DrawingObjects: True ise şekiller ve çizim nesneleri korunur. İsteğe bağlıdır; varsayılanı True.
  • Contents: True ise kilitli hücreler korunur. İsteğe bağlıdır; varsayılanı True.
  • Scenarios: True ise senaryolar korunur. İsteğe bağlıdır; varsayılanı True.
  • UserInterfaceOnly: True ise yalnızca kullanıcı arayüzü korunur, makrolar korumalı sayfada değişiklik yapabilir. İsteğe bağlıdır; varsayılanı False (hem arayüz hem makro korunur).
  • AllowFormattingCells: True ise hücre biçimlendirmeye izin verilir. İsteğe bağlıdır; varsayılanı False.
  • AllowFormattingColumns: True ise sütun biçimlendirmeye (genişlik, gizleme) izin verilir. İsteğe bağlıdır; varsayılanı False.
  • AllowFormattingRows: True ise satır biçimlendirmeye izin verilir. İsteğe bağlıdır; varsayılanı False.
  • AllowInsertingColumns: True ise sütun eklemeye izin verilir. İsteğe bağlıdır; varsayılanı False.
  • AllowInsertingRows: True ise satır eklemeye izin verilir. İsteğe bağlıdır; varsayılanı False.
  • AllowInsertingHyperlinks: True ise köprü eklemeye izin verilir. İsteğe bağlıdır; varsayılanı False.
  • AllowDeletingColumns: True ise sütun silmeye izin verilir (silinecek sütundaki hücrelerin kilidi açık olmalıdır). İsteğe bağlıdır; varsayılanı False.
  • AllowDeletingRows: True ise satır silmeye izin verilir (silinecek satırdaki hücrelerin kilidi açık olmalıdır). İsteğe bağlıdır; varsayılanı False.
  • AllowSorting: True ise sıralamaya izin verilir (sıralanacak hücrelerin kilidi açık olmalıdır). İsteğe bağlıdır; varsayılanı False.
  • AllowFiltering: True ise korumalı sayfada var olan otomatik süzgeçlerin kullanılmasına izin verilir. İsteğe bağlıdır; varsayılanı False.
  • AllowUsingPivotTables: True ise PivotTable raporlarının kullanılmasına izin verilir. İsteğe bağlıdır; varsayılanı False.
Yöntem bir değer döndürmez. Korumayı kaldırmak için Unprotect yöntemi kullanılır.

Kilitli hücreler ve koruma birlikte çalışır​

Koruma yalnızca Locked özelliği True olan hücreleri etkiler. Excel'de tüm hücreler varsayılan olarak kilitlidir; ancak sayfa korunmadıkça bu kilidin bir etkisi yoktur. Kullanıcının veri gireceği hücrelerin kilidini önce açın, sonra sayfayı koruyun. Arayüzde bu ayar Hücre Biçimlendir > Koruma > Kilitli (Format Cells > Protection > Locked) onay kutusudur.
VBA 2 satır
ws.Range("B2:B5").Locked = False
ws.Protect Password:="1234"
Korumalı bir sayfada kilitli hücreye yazmaya çalışan makro, UserInterfaceOnly kullanılmadıysa 1004 numaralı çalışma zamanı hatası alır.

UserInterfaceOnly ve korumayı denetleyen özellikler​

UserInterfaceOnly değeri True verilirse kullanıcı kilitli hücreleri değiştiremez ama makronuz değiştirebilir. Bu ayar çalışma kitabıyla birlikte kaydedilmez; dosya yeniden açıldığında koruma normal biçimde geri gelir. Bu nedenle Workbook_Open olayında Protect yöntemini yeniden çağırmak gerekir.
Korumanın durumunu şu özelliklerle okuyabilirsiniz:
  • ProtectContents: Hücrelerin korunup korunmadığını verir (Boolean).
  • ProtectDrawingObjects: Çizim nesnelerinin korunup korunmadığını verir.
  • ProtectScenarios: Senaryoların korunup korunmadığını verir.
  • ProtectionMode: Arayüz korumasının etkin olup olmadığını verir.
  • Protection: AllowSorting, AllowFiltering, AllowInsertingRows gibi izin özelliklerini barındıran nesneyi döndürür.

1. Parolalı koruma ve kilitli hücreye yazma denemesi​

Adet sütunu (B) ve Sonuç sütunu (E) kullanıcıya açık, diğer hücreler kilitli olmalıdır. Aşağıdaki kodu standart bir modüle yapıştırın. Makro hücre kilitlerini ayarlar, sayfayı parolayla korur ve kilitli Birim Fiyat sütununa yazmayı dener; sonucu E sütununa işler.
VBA 28 satır
Option Explicit

Sub KorumaUygula()
    Dim ws As Worksheet
    Dim r As Long
    Set ws = ThisWorkbook.Worksheets("Satış Girişi")

    ' Önce tüm hücreleri kilitle, giriş ve sonuç sütunlarının kilidini aç
    ws.Cells.Locked = True
    ws.Range("B2:B5").Locked = False
    ws.Range("E2:E5").Locked = False

    ' Sayfayı parola ile koru
    ws.Protect Password:="1234", DrawingObjects:=True, Contents:=True, Scenarios:=True

    ' Kilitli C sütununa yazmayı dene, sonucu E sütununa işle
    For r = 2 To 5
        On Error Resume Next
        Err.Clear
        ws.Cells(r, 3).Value = ws.Cells(r, 3).Value
        If Err.Number <> 0 Then
            ws.Cells(r, 5).Value = "Engellendi"
        Else
            ws.Cells(r, 5).Value = "Yazıldı"
        End If
        On Error GoTo 0
    Next r
End Sub
Worksheet.Protect
Formülünü incelemek için bir hücre seçin.
ABCDE
1ÜrünAdetBirim FiyatTutarSonuç
2Kalem1218,50222,00Engellendi
3Defter4025,001.000,00Engellendi
4Silgi1004,75475,00Engellendi
5Zımba1585,001.275,00Engellendi
Satış GirişiExcelDepo v1.0.0
Makro çalıştıktan sonra sayfa parolalıdır ve yalnızca B ile E sütunları düzenlenebilir. Kilitli Birim Fiyat hücresine yazma denemesinin sonucu E2 hücresinde Engellendi olarak görünür; Tutar sütunundaki formüller ise örneğin ilk satırda 222,00 sonucunu verir. Korumayı kaldırmak için parola olarak 1234 girmeniz gerekir.

2. UserInterfaceOnly ile makronun korumalı sayfaya yazması​

Bu örnekte sayfa parolasız korunur ancak UserInterfaceOnly değeri True verilir. Böylece kullanıcı hiçbir hücreyi değiştiremezken makro Gider sütununu doldurabilir. Kodu standart bir modüle yapıştırın.
VBA 20 satır
Option Explicit

Sub GiderleriHesapla()
    Dim ws As Worksheet
    Dim r As Long
    Set ws = ThisWorkbook.Worksheets("Aylık Rapor")

    ' Kullanıcı arayüzünü koru, makroya yazma izni bırak
    ws.Protect UserInterfaceOnly:=True

    ' Kilitli hücrelere makro ile yaz: gider, gelirin yüzde 75'i olsun
    For r = 2 To 5
        ws.Cells(r, 3).Value = ws.Cells(r, 2).Value * 0.75
        If ws.ProtectContents Then
            ws.Cells(r, 5).Value = "Korumalı"
        Else
            ws.Cells(r, 5).Value = "Korumasız"
        End If
    Next r
End Sub
Worksheet.Protect
Formülünü incelemek için bir hücre seçin.
ABCDE
1AyGelirGiderNetDurum
2Ocak120.000,0090.000,0030.000,00Korumalı
3Şubat135.000,00101.250,0033.750,00Korumalı
4Mart128.000,0096.000,0032.000,00Korumalı
5Nisan150.000,00112.500,0037.500,00Korumalı
Aylık RaporExcelDepo v1.0.0
Gider değerleri kilitli hücrelere yazılmasına rağmen hata oluşmaz; örneğin ocak gideri 90.000,00, net sonuç 30.000,00 olur. Durum sütunundaki Korumalı değeri, ProtectContents özelliğinin sayfanın korunduğunu bildirdiğini gösterir. UserInterfaceOnly ayarı dosyayla birlikte saklanmadığı için, dosya her açıldığında Workbook_Open olayında Protect yöntemini yeniden çağırın.

3. İzin parametreleri ve Protection nesnesi​

Sayfa korunurken sıralama, filtreleme ve sütun biçimlendirme izni verilir; satır ekleme ve hücre biçimlendirme izni verilmez. Makro, Protection nesnesinden izinleri okuyup E sütununa yazar. Kodu standart bir modüle yapıştırın.
VBA 25 satır
Option Explicit

Sub IzinleriUygula()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Personel Listesi")

    ' Belirli işlemlere izin vererek koru
    ws.Protect AllowSorting:=True, AllowFiltering:=True, _
        AllowFormattingColumns:=True, UserInterfaceOnly:=True

    ' Protection nesnesindeki izinleri sayfaya yaz
    ws.Range("E2").Value = IzinMetni(ws.Protection.AllowSorting)
    ws.Range("E3").Value = IzinMetni(ws.Protection.AllowFiltering)
    ws.Range("E4").Value = IzinMetni(ws.Protection.AllowFormattingColumns)
    ws.Range("E5").Value = IzinMetni(ws.Protection.AllowInsertingRows)
    ws.Range("E6").Value = IzinMetni(ws.Protection.AllowFormattingCells)
End Sub

Function IzinMetni(izin As Boolean) As String
    If izin Then
        IzinMetni = "İzinli"
    Else
        IzinMetni = "Yasak"
    End If
End Function
Worksheet.Protect
Formülünü incelemek için bir hücre seçin.
ABCDE
1PersonelŞehirMaaşAyarDurum
2Ayşe YılmazAnkara32.000,00Sıralamaİzinli
3Mehmet Demirİzmir28.500,00Filtrelemeİzinli
4Fatma KayaBursa30.250,00Sütun biçimlendirmeİzinli
5Ali ÇelikAdana27.800,00Satır eklemeYasak
6Zeynep ArslanKonya29.900,00Hücre biçimlendirmeYasak
Personel ListesiExcelDepo v1.0.0
Durum sütunu, sayfa korunduktan sonra hangi işlemlerin açık kaldığını gösterir: sıralama için İzinli, filtreleme için İzinli, sütun biçimlendirme için İzinli, satır ekleme için Yasak ve hücre biçimlendirme için Yasak. İzin vermediğiniz her işlem varsayılan olarak yasaktır. Sıralamanın çalışması için sıralanacak hücrelerin kilidinin açık olması, filtrelemenin çalışması için de süzgecin sayfada önceden kurulmuş olması gerekir.

Kullanırken dikkat edin​

  • Parola unutulursa: Parolayı unutursanız sayfa korumasını normal yollarla kaldıramazsınız. Parolayı güvenli bir yerde saklayın. Sayfa koruma parolası dosyayı şifrelemez; yalnızca yanlışlıkla yapılan değişiklikleri engelleyen hafif bir önlemdir, gizli veriyi bu yolla korumayın.
  • Zaten korumalı sayfa: Parolalı korumalı bir sayfada Protect yöntemini yeniden çağırırsanız hata alabilirsiniz. Ayarları değiştirmek için önce Unprotect yöntemini aynı parolayla çağırın, değişiklikleri yapın ve sayfayı yeniden koruyun.
  • Kilidi açmayı unutmayın: Tüm hücreler varsayılan olarak kilitlidir. Kullanıcının veri gireceği hücrelerin Locked özelliğini False yapmadan sayfayı korursanız kullanıcı hiçbir hücreye yazamaz.
  • UserInterfaceOnly kalıcı değildir: UserInterfaceOnly ayarı dosya kaydedilip kapatıldığında kaybolur. Makroların korumalı sayfaya yazabilmesi için Workbook_Open olayında Protect yöntemini UserInterfaceOnly değeri True olarak yeniden çalıştırın. Ayrıca bu ayar, korumalı sayfada yinelenen Protect çağrılarında sıfırlanabildiğinden her çağrıda yeniden belirtilmelidir.
  • Çalışma kitabı koruması ayrıdır: Worksheet.Protect yalnızca tek bir sayfayı korur. Sayfa ekleme, silme, yeniden adlandırma ve taşıma işlemlerini engellemek için Workbook.Protect yöntemi kullanılır.
  • İlgili konular:
    • Worksheet.Unprotect: Sayfa korumasını kaldırır.
    • Range.Locked: Hücrenin kilitli olup olmadığını belirler.
    • Range.FormulaHidden: Korumalı sayfada formülün formül çubuğunda gizlenmesini sağlar.
    • Worksheet.ProtectContents: Hücre korumasının etkin olup olmadığını verir.
    • Worksheet.Protection: Korumada hangi işlemlere izin verildiğini gösteren nesne.
    • Worksheet.EnableSelection: Korumalı sayfada hangi hücrelerin seçilebileceğini belirler.
    • Workbook.Protect: Çalışma kitabının yapısını korur.
    • Workbook_Open: Dosya açılırken korumayı yeniden uygulamak için kullanılan olay.
    • HÜCRE: Hücrenin koruma durumunu okumak için kullanılabilen çalışma sayfası işlevi.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
9
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst