Genel Bakış
Worksheet.Unprotect (Worksheet.Unprotect method), korumalı bir çalışma sayfasının korumasını kaldıran yöntemdir. Sayfa bir parolayla korunmuşsa aynı parola yöntemin Password bağımsız değişkeniyle verilir. Makronun korumalı sayfaya veri yazması, biçim değiştirmesi ya da satır eklemesi gerektiğinde önce bu yöntem çağrılır, iş bitince sayfa Protect ile yeniden korunur.
Bir diğer yol Protect çağrısında UserInterfaceOnly:=True vermektir; bu durumda makro korumayı kaldırmadan sayfaya yazabilir, ancak kullanıcı arayüzü korumalı kalır. Bu ayar dosya kaydedilip yeniden açıldığında saklanmaz, yani her açılışta Protect yeniden çağrılmalıdır.
Arayüzde aynı işlem Gözden Geçir > Sayfa Korumasını Kaldır (Review > Unprotect Sheet) komutuyla yapılır. Parolayı kodun içine düz metin olarak yazmak güvenlik açısından zayıftır; sayfa koruması dosyayı yetkisiz erişime karşı koruyan bir güvenlik önlemi değil, kazara değişiklikleri önleyen bir araç olarak düşünülmelidir.
Makro, stoğu 20'nin altında olan ürünlere Sipariş ver, diğerlerine Yeterli yazar. Klavye satırında Yeterli, Fare satırında Sipariş ver, Monitör satırında Sipariş ver sonucu görünür. Korumalı sayfaya doğrudan yazılsaydı hata oluşurdu; Unprotect bu engeli yalnızca makronun çalıştığı süre için kaldırır.
B2 hücresi yanlış parola denemesinde oluşan hata kodunu (1004) gösterir; hata On Error Resume Next ile yakalandığı için makro durmaz. B3 hücresindeki DOĞRU değeri, yanlış parolanın korumayı kaldırmadığını belirtir. B4 hücresindeki YANLIŞ değeri ise doğru parolayla korumanın kalktığını gösterir.
Makro sayfa korumalıyken bile her hücreyi tek tek yazabilir; çünkü GuvenliYaz işlevi her çağrıda korumayı kaldırır, yazar ve geri koyar. Ocak satırında satış tutarı 1.250, durum ise Güncellendi olarak görünür; Nisan satırında 1.710 değeri yazılır. Sayfa makro bittiğinde yine korumalıdır.
Söz dizimi
Yöntem bir Worksheet nesnesi üzerinde çağrılır ve değer döndürmez:
VBA
5 satır
ifade.Unprotect(Password)
' Örnekler
Worksheets("Stok Listesi").Unprotect Password:="1234"
ActiveSheet.Unprotect
- ifade: Bir Worksheet nesnesini veren ifade (ör. Worksheets("Stok Listesi") ya da ActiveSheet); zorunludur.
- Password: Sayfayı korurken kullanılan parola; isteğe bağlıdır (Variant). Büyük/küçük harf duyarlıdır. Sayfa parolasız korunmuşsa bu bağımsız değişken atlanır ve koruma doğrudan kalkar. Sayfa parolalıysa ve bağımsız değişken atlanırsa Excel parolayı sormak için bir pencere açar.
Koruma durumunu denetleme ve hata davranışı
Bir sayfanın korunup korunmadığını ProtectContents özelliği gösterir; hücreler korunuyorsa True döner. Benzer şekilde ProtectDrawingObjects çizim nesnelerinin, ProtectScenarios senaryoların korunup korunmadığını bildirir. Makroda önce durumu okuyup yalnızca gerekirse Unprotect çağırmak, hem gereksiz parola sorusunu hem de hatayı önler.- Yanlış parola: Parola yanlış verilirse çalışma zamanı hatası (genellikle 1004) oluşur ve sayfa korumalı kalır. Hatayı On Error ile yakalayıp Err.Number değerine bakabilirsiniz.
- Parola atlanırsa: Parolalı sayfada Excel bir parola penceresi gösterir; makro kullanıcı yanıtlayana kadar bekler. Zamanlanmış ya da gözetimsiz çalışan makrolarda bu istenmez, parolayı açıkça verin.
- Koruma açıksa yazma: Kilitli bir hücreye korumalı sayfada yazmak hata verir. Bu yüzden yazma işleminden önce Unprotect, sonra Protect çağrılır.
Protect ile birlikte kullanım ve güvenlik
Unprotect çoğunlukla Protect yöntemiyle çift olarak kullanılır. Tipik akış şöyledir:
VBA
3 satır
ws.Unprotect Password:="1234"
' ... sayfada değişiklik yapılır ...
ws.Protect Password:="1234"
Arayüzde aynı işlem Gözden Geçir > Sayfa Korumasını Kaldır (Review > Unprotect Sheet) komutuyla yapılır. Parolayı kodun içine düz metin olarak yazmak güvenlik açısından zayıftır; sayfa koruması dosyayı yetkisiz erişime karşı koruyan bir güvenlik önlemi değil, kazara değişiklikleri önleyen bir araç olarak düşünülmelidir.
1. Veri yazmak için korumayı geçici kaldırma
Stok durumunu hesaplayıp Durum sütununa yazan bir makro kuruyoruz. Sayfa parolayla korunduğundan makro önce korumayı kaldırır, yazma işini bitirince sayfayı yeniden korur. Kodu bir standart modüle (Ekle > Modül) yapıştırın.
VBA
25 satır
Option Explicit
Sub StokDurumuYaz()
Dim ws As Worksheet
Dim i As Long
Set ws = ThisWorkbook.Worksheets("Stok Listesi")
' Sayfayı parolayla koruyoruz (örnek senaryo)
ws.Protect Password:="1234"
' Yazmadan önce korumayı kaldırıyoruz
ws.Unprotect Password:="1234"
For i = 2 To 7
If ws.Cells(i, 2).Value < 20 Then
ws.Cells(i, 3).Value = "Sipariş ver"
Else
ws.Cells(i, 3).Value = "Yeterli"
End If
Next i
' İş bitince sayfayı yeniden koruyoruz
ws.Protect Password:="1234"
End Sub
Worksheet.Unprotect
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Ürün | Stok | Durum |
| 2 | Klavye | 45 | Yeterli |
| 3 | Fare | 12 | Sipariş ver |
| 4 | Monitör | 8 | Sipariş ver |
| 5 | Kulaklık | 30 | Yeterli |
| 6 | Yazıcı | 5 | Sipariş ver |
| 7 | Tarayıcı | 18 | Sipariş ver |
Stok ListesiExcelDepo v1.0.0
2. Yanlış parolayı hata yakalayarak yönetme
Bu örnekte sayfa korunur, önce yanlış parolayla korumayı kaldırma denenir ve oluşan hata kodu kaydedilir. Ardından doğru parolayla koruma kaldırılır. Sonuçlar, sayfa açıldıktan sonra B sütununa yazılır. Kodu standart modüle yapıştırın.
VBA
32 satır
Option Explicit
Sub YanlisParolaDene()
Dim ws As Worksheet
Dim hataKodu As Long
Dim yanlisSonrasi As Boolean
Dim dogruSonrasi As Boolean
Set ws = ThisWorkbook.Worksheets("Parola Denemesi")
' Sayfayı korumaya alıyoruz
ws.Protect Password:="Dogru1"
' Yanlış parolayla deneme; hatayı yakalıyoruz
On Error Resume Next
ws.Unprotect Password:="Yanlis1"
hataKodu = Err.Number
Err.Clear
On Error GoTo 0
' Yanlış denemeden sonra koruma sürüyor mu?
yanlisSonrasi = ws.ProtectContents
' Doğru parolayla korumayı kaldırıyoruz
ws.Unprotect Password:="Dogru1"
dogruSonrasi = ws.ProtectContents
' Sayfa artık korumasız olduğu için sonuçları yazabiliriz
ws.Range("B2").Value = hataKodu
ws.Range("B3").Value = yanlisSonrasi
ws.Range("B4").Value = dogruSonrasi
End Sub
Worksheet.Unprotect
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Adım | Sonuç |
| 2 | Yanlış parolayla Unprotect hata kodu | 1004 |
| 3 | Yanlış denemeden sonra ProtectContents | DOĞRU |
| 4 | Doğru parolayla açtıktan sonra ProtectContents | YANLIŞ |
Parola DenemesiExcelDepo v1.0.0
3. Sayfa korumasını koruyan güvenli yazma yordamı
Yeniden kullanılabilir bir işlev yazıyoruz: sayfa korumalıysa önce açar, hücreye yazar ve sayfayı eski durumuna getirir; korumasızsa dokunmaz. Ana makro sayfayı korur ve dört aylık satış tutarını bu işlevle yazar. Kodu standart modüle yapıştırın.
VBA
32 satır
Option Explicit
' Korumalıysa açar, yazar, yeniden korur.
' Sayfa baştan korumalıysa True döndürür.
Function GuvenliYaz(ws As Worksheet, adres As String, deger As Variant, parola As String) As Boolean
Dim korumaliydi As Boolean
korumaliydi = ws.ProtectContents
If korumaliydi Then ws.Unprotect Password:=parola
ws.Range(adres).Value = deger
If korumaliydi Then ws.Protect Password:=parola
GuvenliYaz = korumaliydi
End Function
Sub AylikSatisYaz()
Dim ws As Worksheet
Dim tutar As Variant
Dim i As Long
Set ws = ThisWorkbook.Worksheets("Satış Tablosu")
tutar = Array(1250, 1480, 1320, 1710)
' Sayfayı korumaya alıyoruz
ws.Protect Password:="2024"
For i = 0 To 3
Call GuvenliYaz(ws, "B" & (i + 2), tutar(i), "2024")
Call GuvenliYaz(ws, "C" & (i + 2), "Güncellendi", "2024")
Next i
End Sub
Worksheet.Unprotect
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Ay | Satış | Durum |
| 2 | Ocak | 1.250 | Güncellendi |
| 3 | Şubat | 1.480 | Güncellendi |
| 4 | Mart | 1.320 | Güncellendi |
| 5 | Nisan | 1.710 | Güncellendi |
Satış TablosuExcelDepo v1.0.0
Kullanırken dikkat edin
- Parola büyük/küçük harfe duyarlıdır: Unprotect çağrısındaki parola, Protect ile verilen parolayla harf harf aynı olmalıdır. Dogru1 ile dogru1 farklı parolalardır. Yanlış parola çalışma zamanı hatası üretir; gerekirse On Error ile yakalayın.
- Parolayı atlamayın: Parolalı bir sayfada Unprotect parolasız çağrılırsa Excel bir parola penceresi açar ve makro yanıt bekler. Otomatik çalışan makrolarda parolayı daima bağımsız değişken olarak verin.
- Önce durumu denetleyin: ProtectContents özelliğiyle sayfanın korumalı olup olmadığına bakın. Böylece korumasız bir sayfada gereksiz işlem yapmaz, işlem bitince sayfayı başlangıçtaki durumuna döndürebilirsiniz; üçüncü örnekteki yordam bu yaklaşımı gösterir.
- Koruma tekrar açılmalıdır: Makro hata ile yarıda kesilirse sayfa korumasız kalabilir. Bu riski azaltmak için hata yakalama bloğunda da Protect çağırın ya da Protect yönteminde UserInterfaceOnly:=True seçeneğini kullanın. Bu seçenek dosya kapatılınca saklanmaz; açılışta (ör. Workbook_Open olayında) yeniden ayarlanmalıdır.
- Çalışma kitabı korumasından farklıdır: Worksheet.Unprotect yalnızca tek bir sayfanın korumasını kaldırır. Çalışma kitabının yapısını (sayfa ekleme, silme, yeniden adlandırma) koruyan ayar için Workbook.Unprotect yöntemi kullanılır. Her sayfanın korumasını ayrı ayrı kaldırmanız gerekir.
- Güvenlik beklentisi: Sayfa koruması kazara değişiklikleri önlemek içindir; güçlü bir şifreleme sağlamaz. Hassas veriyi korumak için dosya şifrelemesi ya da erişim denetimi kullanın. Ayrıca parolayı VBA kodunda düz metin olarak saklamayın; kod görüntülenebilir.
- İlgili konular:
- Worksheet.Protect: Sayfayı parolayla ve ayrıntılı izin seçenekleriyle korur.
- Workbook.Unprotect: Çalışma kitabı yapısının korumasını kaldırır.
- Worksheet.ProtectContents: Hücrelerin korunup korunmadığını bildiren özellik.
- Worksheet.ProtectDrawingObjects ve ProtectScenarios: Nesne ve senaryo korumasını gösteren özellikler.
- Range.Locked: Hücrenin korumada kilitli sayılıp sayılmayacağını belirler.
- Worksheet.AllowEditRanges: Korumalı sayfada düzenlemeye izin verilen aralıkları tanımlar.
- On Error: Yanlış parola gibi çalışma zamanı hatalarını yakalamak için kullanılır.