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.
Korumalı bir sayfada kilitli hücreye yazmaya çalışan makro, UserInterfaceOnly kullanılmadıysa 1004 numaralı çalışma zamanı hatası alır.
Korumanın durumunu şu özelliklerle okuyabilirsiniz:
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.
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.
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.
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.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.
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"
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.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Ürün | Adet | Birim Fiyat | Tutar | Sonuç |
| 2 | Kalem | 12 | 18,50 | 222,00 | Engellendi |
| 3 | Defter | 40 | 25,00 | 1.000,00 | Engellendi |
| 4 | Silgi | 100 | 4,75 | 475,00 | Engellendi |
| 5 | Zımba | 15 | 85,00 | 1.275,00 | Engellendi |
Satış GirişiExcelDepo v1.0.0
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.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Ay | Gelir | Gider | Net | Durum |
| 2 | Ocak | 120.000,00 | 90.000,00 | 30.000,00 | Korumalı |
| 3 | Şubat | 135.000,00 | 101.250,00 | 33.750,00 | Korumalı |
| 4 | Mart | 128.000,00 | 96.000,00 | 32.000,00 | Korumalı |
| 5 | Nisan | 150.000,00 | 112.500,00 | 37.500,00 | Korumalı |
Aylık RaporExcelDepo v1.0.0
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.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Personel | Şehir | Maaş | Ayar | Durum |
| 2 | Ayşe Yılmaz | Ankara | 32.000,00 | Sıralama | İzinli |
| 3 | Mehmet Demir | İzmir | 28.500,00 | Filtreleme | İzinli |
| 4 | Fatma Kaya | Bursa | 30.250,00 | Sütun biçimlendirme | İzinli |
| 5 | Ali Çelik | Adana | 27.800,00 | Satır ekleme | Yasak |
| 6 | Zeynep Arslan | Konya | 29.900,00 | Hücre biçimlendirme | Yasak |
Personel ListesiExcelDepo v1.0.0
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.