Range Nesnesi-2 (Hücre Biçimlendirme)

R

VBA|Seviye|Temel

Excel’de verilerin yazıldığı hücrelerin çok sayıda özelliği vardır ve bunların tümü VBA programlama dili ile yönetilebilir. Hücrelerin biçimsel özellikleri, Excel’in kendi gruplandırmasından yararlanılarak sayı, hizalama, yazı tipi, kenarlık, dolgu ve koruma şeklinde 6 farklı temel kategoride ele alınacaktır. Hücrelerin biçimlendirilmesine ilişkin Excel’in kendi kategorisine ulaşmak için bir hücreyi seçip sağ tık yapınız ve hücreleri biçimlendir yolunu izleyiniz. Açılacak pencere aşağıda gösterilmiştir.

1.  Sayı, Genel, Tarih, Saat, Metin, Yüzde, Para Birimi vb. Formatlar

Hücrelerin genel, bindelik ve ondalık ayracı olan/olmayan sayı, tarih, saat, metin vb. sayısal/alfabetik özelliklerine ilişkin metotlar aşağıdaki prosedürde yer almaktadır.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet, i As Integer

Set Ws = ThisWorkbook.Worksheets(1)

'Başlıklar
Ws.Range("A1").Value = "Hücre Değeri"
Ws.Range("B1").Value = "Hücre Özelliği"
Ws.Range("D1").Value = "Hücre Değeri"
Ws.Range("E1").Value = "Hücre Özelliği"

'Formatlar
Ws.Range("A2").NumberFormat = "General"
Ws.Range("A2").Value = "ishakkutlu.com"
Ws.Range("B2").Value = "Genel"

Ws.Range("A3").NumberFormat = "#,##0.00"
Ws.Range("A3").Value = 12345
Ws.Range("B3").Value = "İki haneli ondalığa ve bindelik ayraca sahip sayı"

Ws.Cells(4, 1).NumberFormat = "#,##0.00 TL" 'Para birimi
Ws.Cells(4, 1).Value = 100
Ws.Cells(4, 2).Value = "Para birimi"

Ws.Cells(5, 1).NumberFormat = "dd.mm.yyyy" 'Günü ve ayı iki haneli olan tarih
Ws.Cells(5, 1).Value = DateValue("27/10/2021")
Ws.Cells(5, 2).Value = "Tarih"

Ws.Cells(6, 1).NumberFormat = "hh:mm;@" 'Saat ve dakika
Ws.Cells(6, 1).Value = TimeValue("09:15")
Ws.Cells(6, 2).Value = "Saat, dakika"

Ws.Cells(7, 1).NumberFormat = "0.00%" 'İki haneli ondalığa sahip yüzde
Ws.Cells(7, 1).Value = 0.17 'VBA'da ondalık ifadeler virgül ile değil nokta ile belirtilir!
Ws.Cells(7, 2).Value = "Yüzde"

Ws.Cells(8, 1).NumberFormat = "General"
Ws.Cells(8, 1).Value = "000123"
Ws.Cells(8, 2).Value = "Genel"

Ws.Cells(9, 1).NumberFormat = "@" 'Metin
Ws.Cells(9, 1).Value = "000123"
Ws.Cells(9, 2).Value = "Metin"


'_____________Tümü Genel format (Karşılaştırma yapılabilmesi amacıyla eklenmiştir.)

Ws.Range("D2").NumberFormat = "General" 'Genel
Ws.Range("D2").Value = "ishakkutlu.com"

Ws.Range("D3").NumberFormat = "General" 'Genel
Ws.Range("D3").Value = 12345

Ws.Cells(4, 4).NumberFormat = "General" 'Genel
Ws.Cells(4, 4).Value = 100

Ws.Cells(5, 4).NumberFormat = "General" 'Genel
Ws.Cells(5, 4).Value = DateValue("27/10/2021")

Ws.Cells(6, 4).NumberFormat = "General" 'Genel
Ws.Cells(6, 4).Value = TimeValue("09:15")

Ws.Cells(7, 4).NumberFormat = "General" 'Genel
Ws.Cells(7, 4).Value = 0.17 'VBA'da ondalık ifadeler virgül ile değil nokta ile belirtilir!

Ws.Cells(8, 4).NumberFormat = "General"
Ws.Cells(8, 4).Value = "000123"

Ws.Cells(9, 4).NumberFormat = "General" 'Genel
Ws.Cells(9, 4).Value = "000123"

For i = 2 To 9
    Ws.Cells(i, 5).Value = "Genel"
Next i

End Sub

Yukarıdaki prosedürün sonucuna ilişkin ekran görüntüsü aşağıdadır.

Hücrelerin sayılara ilişkin en yaygın kullanılan biçimsel özellikleri aşağıdaki prosedürde yer almaktadır.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet, i As Integer

Set Ws = ThisWorkbook.Worksheets(1)

'Sayı Formatları
Ws.Cells(2, 1).NumberFormat = "#,##0.00" 'İki haneli ondalık (bindelik ayraç var)
Ws.Cells(3, 1).NumberFormat = "#,##0.000" 'Üç haneli ondalık (bindelik ayraç var)
Ws.Cells(4, 1).NumberFormat = "#,##0.0000" 'Dört haneli ondalık (bindelik ayraç var)
Ws.Cells(5, 1).NumberFormat = "#,##0.00;[Red]#,##0.00" 'Negatif sayıları önünde eksi işareti olmadan bir renk kullanarak belirten iki haneli ondalık (bindelik ayraç var)
Ws.Cells(6, 1).NumberFormat = "#,##0.00_ ;[Blue]-#,##0.00" 'Negatif sayıları önünde eksi işareti ile birlikte bir renk kullanarak belirten iki haneli ondalık (bindelik ayraç var)
Ws.Cells(7, 1).NumberFormat = "0.00" 'İki haneli ondalık (bindelik ayraç yok)
Ws.Cells(8, 1).NumberFormat = "0" 'Ondalık hane yok (bindelik ayraç yok)

'UYARI! Avrupa sisteminde bindelik ayraç olarak nokta (.), ondalık ayraç olarak ise virgül (,) kullanılır.
'Ancak Amerikan sisteminde tam tersidir ki VBA'da Amerikan sistemi kullanılır,
'Bu yüzden yukarıda bindelik ayraç olarak virgül (,), ondalık ayraç olarak ise nokta (.) kullanıldığına dikkat ediniz.

'Hücre değerleri
Ws.Cells(2, 1).Value = 7512.25
Ws.Cells(3, 1).Value = 7512.25
Ws.Cells(4, 1).Value = 7512.25
Ws.Cells(5, 1).Value = -7512.25
Ws.Cells(6, 1).Value = -7512.25
Ws.Cells(7, 1).Value = 7512.25
Ws.Cells(8, 1).Value = 7512.25

End Sub

Sayılara ilişkin prosedür sonucunun ekran görüntüsü aşağıdadır.

Hücrelerin tarihlere (gün, ay, yıl) ilişkin en yaygın kullanılan biçimsel özellikleri aşağıdaki prosedürde yer almaktadır.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet, i As Integer

Set Ws = ThisWorkbook.Worksheets(1)

Ws.Cells(2, 1).NumberFormat = "dd.mm.yyyy"
Ws.Cells(3, 1).NumberFormat = "d.mm.yyyy"
Ws.Cells(4, 1).NumberFormat = "d.m.yyyy"
Ws.Cells(5, 1).NumberFormat = "d mmmm yyyy"
Ws.Cells(6, 1).NumberFormat = "yyyy.mm.dd"
Ws.Cells(7, 1).NumberFormat = "d mmmm yyyy dddd"
Ws.Cells(8, 1).NumberFormat = "dd.mm.yy"
Ws.Cells(9, 1).NumberFormat = "dd-mm-yyyy"
Ws.Cells(10, 1).NumberFormat = "dd\/mm\/yyyy"

'Hücre değerleri
Ws.Cells(2, 1).Value = DateValue("06.09.2021")
Ws.Cells(3, 1).Value = DateValue("06.09.2021")
Ws.Cells(4, 1).Value = DateValue("06.09.2021")
Ws.Cells(5, 1).Value = Date 'Bugünü gün, ay, yıl olarak verir
Ws.Cells(6, 1).Value = Date
Ws.Cells(7, 1).Value = Date
Ws.Cells(8, 1).Value = Date
Ws.Cells(9, 1).Value = Date
Ws.Cells(10, 1).Value = Date

End Sub

Date metodu, içinde bulunulan tarihi gün, ay, yıl olarak verir. Tarihlere ilişkin prosedür sonucunun ekran görüntüsü aşağıdadır.

Hücrelerin zamana (saat, dakika, saniye) ilişkin en yaygın kullanılan biçimsel özellikleri aşağıdaki prosedürde yer almaktadır.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet, i As Integer

Set Ws = ThisWorkbook.Worksheets(1)

Ws.Cells(2, 1).NumberFormat = "hh:mm;@" 'Saat, dakika
Ws.Cells(3, 1).NumberFormat = "hh:mm:ss;@" 'Saat, dakika, saniye
Ws.Cells(4, 1).NumberFormat = "h:m:s;@" 'Saat, dakika, saniye
Ws.Cells(5, 1).NumberFormat = "dd.mm.yyyy hh:mm:ss" 'Tarih, saat, dakika, saniye
Ws.Cells(6, 1).NumberFormat = "dd.mm.yy hh:mm:ss" 'Tarih, saat, dakika, saniye
Ws.Cells(7, 1).NumberFormat = "d mmmm yyyy dddd hh:mm:ss" 'Tarih, saat, dakika, saniye
Ws.Cells(8, 1).NumberFormat = "d mmmm yyyy hh:mm:ss" 'Tarih, saat, dakika, saniye
Ws.Cells(9, 1).NumberFormat = "dd-mm-yyyy hh.mm.ss" 'Tarih, saat, dakika, saniye
Ws.Cells(10, 1).NumberFormat = "dd\/mm\/yyyy hh:-:mm:-:ss" 'Tarih, saat, dakika, saniye

'Hücre değerleri
Ws.Cells(2, 1).Value = TimeValue("09:05:07")
Ws.Cells(3, 1).Value = TimeValue("09:05:07")
Ws.Cells(4, 1).Value = TimeValue("09:05:07")
Ws.Cells(5, 1).Value = Now() 'Şu andaki tarih, saat, dakika, saniye
Ws.Cells(6, 1).Value = Now()
Ws.Cells(7, 1).Value = Now()
Ws.Cells(8, 1).Value = Now()
Ws.Cells(9, 1).Value = Now()
Ws.Cells(10, 1).Value = Now()

End Sub

Now() metodu, içinde bulunulan zamanı gün, ay, yıl, saat, dakika, saniye olarak verir. Zamana ilişkin prosedür sonucunun ekran görüntüsü aşağıdadır.

Tarih ve zamana ilişkin biçimlendirmeler konusuna “Date-Tarih Değişkeni “ isimli makalede de yer verilmiştir. Konular arasındaki benzerlik ve farklılıkların karşılaştırılması amacıyla söz konusu makalenin de incelenmesi önerilir.

Bir hücrenin biçimlendirme (format) özellikleri hakkında (yukarıda bulunmayan) herhangi bir metodun VBA koduna erişmek için internette arama yapabilirsiniz. Diğer bir yol ise Makro Kaydet komutu ile manuel olarak yaptığınız hücre biçimlendirmelerini VBA koduna dönüştürmek suretiyle ilgili biçimlendirme metodunu elde edebilirsiniz. Konuyla ilgili olarak “Vba-Makro Öğrenmek İçin Temel Kavramlar-3” isimli makalenin “Makro Kaydetmek” isimli alt konusuna bakabilirsiniz. Üçüncü bir yol ise bir hücreyi seçip sağ tık yapabilir ve hücre biçimlendirme penceresini açarak aşağıdaki adımları izleyebilirsiniz.

Yukarıdaki resimde bindelik ayraç kullanmadan iki haneli ondalık sayı formatını kullanmak istediğimiz varsayılmıştır. Yukarıdaki resimde gösterildiği-açıklandığı gibi “İsteğe Uyarlanmış” penceresinde yer alan “0,00” ifadesi, aradığımız VBA metodudur. Ancak ondalık-bindelik ayraç kullanımı konusunda Amerikan-Avrupa sistemi birbirinden farklıdır. Microsoft (MS) Office sürümünü Türkçe olarak kullanıyorsanız (yukarıdaki ekran görüntüleri MS Office Türkçe sürümünde hazırlanmıştır), manuel yaptığınız sayı biçimlendirmesine ilişkin oluşturulan VBA metodunuz “0,00” ifadesi değil, aşağıdaki resimde gösterildiği gibi “0.00” ifadesi olacaktır.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet, i As Integer

Set Ws = ThisWorkbook.Worksheets(1)

'Sayı Formatları
Ws.Cells(8, 1).NumberFormat = "0.00" 'İki haneli ondalık (bindelik ayraç YOK)
Ws.Cells(8, 1).Value = 7512.25

End Sub

2.  Verilerin Hizalanması

Hücrelerde bulunan verilerin hizalanmasını ilişkin en yaygın kullanılan biçimsel özellikler aşağıdaki prosedürde yer almaktadır.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet, i As Integer

Set Ws = ThisWorkbook.Worksheets(1)
Ws.Rows("5:9").RowHeight = 30 'satır yüksekliği

'Yatay hizalama
Ws.Cells(1, 1).HorizontalAlignment = xlGeneral 'Varsayılan
Ws.Cells(2, 1).HorizontalAlignment = xlLeft 'Sola yasla
Ws.Cells(3, 1).HorizontalAlignment = xlRight 'Sağa yasla
Ws.Cells(4, 1).HorizontalAlignment = xlCenter 'Ortala yasla
Ws.Cells(5, 1).HorizontalAlignment = xlJustify 'İki yana yasla

'Dikey hizalama
Ws.Cells(6, 1).VerticalAlignment = xlTop 'Yukarı hizala
Ws.Cells(7, 1).VerticalAlignment = xlBottom 'Aşağı hizala
Ws.Cells(8, 1).VerticalAlignment = xlCenter 'Ortaya hizala

'Metni döndür
Ws.Cells(9, 1).Orientation = 15 'Açı

'Girinti
Ws.Cells(10, 1).IndentLevel = 3 'Daima 3 birim girinti verir. Var olan girintileri kaldırmak için değeri 0 yapmak yeterli olur.
'Ws.Cells(10, 1).InsertIndent 1 'Prosedürün her çalışmasında girinti 1 artar.

'Birden fazla method With/End With methodu ile aşağıdaki gibi birleştirilebilir.
'WrapText kapalı
With Ws.Cells(11, 1)
.WrapText = False 'Metni kaydır
.ShrinkToFit = False 'Metni hücreye sığacak şekilde daralt WrapText değeri True iken kullanılamaz!
.MergeCells = False 'Hücreleri birleştir 'Birden fazla hücre olmalıdır.
End With
'WrapText açık
With Ws.Cells(12, 1)
.WrapText = True 'Metni kaydır
.ShrinkToFit = False 'Metni hücreye sığacak şekilde daralt WrapText değeri True iken kullanılamaz!
.MergeCells = False 'Hücreleri birleştir 'Birden fazla hücre olmalıdır.
End With

'ShrinkToFit açık
With Ws.Cells(1, 2)
.WrapText = False
.ShrinkToFit = True 'Açık
.MergeCells = False
End With

'MergeCells açık
With Ws.Range("B2:B5") '4 hücre var
.WrapText = True 'Açık
.ShrinkToFit = False
.MergeCells = True 'Açık
.VerticalAlignment = xlCenter
.HorizontalAlignment = xlCenter
End With

'Hücreleri birleştirmek/ayırmak için şu yöntemi de kullanabilirsiniz.
Ws.Range("B6:B8").Merge 'Birleştir
'Ws.Range("B6:B8").UnMerge 'Ayır

End Sub

Prosedür çalıştırılmadan önce veri seti aşağıdaki resimde gösterildiği gibidir.

Hücrelerde bulunan verilerin hizalanmasına ilişkin prosedür sonucunun ekran görüntüsü ise aşağıdadır.

Reset butonu, verilerin hizalanmasına ilişkin yapılan işlemleri varsayılana döndürür.

Private Sub CommandButton2_Click()
Dim Ws As Worksheet, i As Integer

'Reset
Set Ws = ThisWorkbook.Worksheets(1)
ThisWorkbook.Worksheets(2).Range("A1:D12").Copy Ws.Range("A1:D12") 'Ham verileri sayfa2 den al.
Ws.Rows("5:9").RowHeight = 15

End Sub

Sayfa indeks numarası 2 olan sayfada verilerin varsayılan ayarlarda kopyası vardır. Reset, yani cammandbutton2 prosedürü sayfa 2’de bulunan verileri sayfa 1’e kopyalar.

3.  Yazı Tipi, Yazı Büyüklüğü, Yazı Rengi, Dolgu Rengi vb. Formatlar

Hücrelerin yazi tipine ilişkin en yaygın kullanılan biçimsel özellikleri aşağıdaki prosedürde yer almaktadır.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet, i As Integer

Set Ws = ThisWorkbook.Worksheets(1)

With Ws.Range("A1:A4").Font
    .Name = "Arial" 'yazı tipi
    .Size = 14 'yazı büyüklüğü
    .Bold = False 'kalın
    .Italic = True 'italik
    .Underline = True 'altı çizili
    .Color = RGB(132, 151, 176) 'yazı rengi
    .Strikethrough = False 'üstü çizili
    .Subscript = False 'alt simge
    .Superscript = False 'üst simge
End With
Ws.Cells(5, 1).Font.Strikethrough = True 'üstü çizili

Ws.Cells(7, 1).Interior.Color = RGB(132, 151, 176) 'hücrenin dolgu rengi
Ws.Cells(8, 1).Interior.Pattern = xlPatternLightUp 'hücrenin arka plan deseni
Ws.Cells(8, 1).Font.Bold = True 'kalın

End Sub

Hücrelerde bulunan verilerin yazı tipine ilişkin prosedür sonucunun ekran görüntüsü ise aşağıdadır.

Aşağıdaki bağlantıdan hücrelerin arka plan desenlerine ilişkin daha fazla metoda ulaşabilirsiniz.

https://docs.microsoft.com/en-us/office/vba/api/excel.xlpattern

4.  Tablo Kenarlıkları

Tablolara kenarlık eklenmesine ilişkin aşağıdaki prosedürü inceleyebilirsiniz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet, i As Integer
Dim MyBorder As Range

Set Ws = ThisWorkbook.Worksheets(1)
Set MyBorder = Ws.Range("B2:D12")

ActiveWindow.DisplayGridlines = False 'Aktif sayfada kılavuz çizgilerini gizler
'ActiveWindow.DisplayGridlines = True 'Aktif sayfada kılavuz çizgilerini gösterir

'Belirtilen (Set edilen) alanda tüm kenarlıkları kaldırır
MyBorder.Borders.LineStyle = xlNone
MyBorder.Borders(xlDiagonalDown).LineStyle = xlNone
MyBorder.Borders(xlDiagonalUp).LineStyle = xlNone

'Belirtilen (Set edilen) alanda (çaprazlar hariç) tüm kenarlıkları ekler
With MyBorder.Borders

    '___Çizgi tipleri, düz, noktalı, kesikli çizgi vb.
    
    .LineStyle = xlContinuous
'    .LineStyle = xlDot
'    .LineStyle = xlDashDotDot
'    .LineStyle = xlDash
'    .LineStyle = xlSlantDashDot
'    .LineStyle = xlDouble
'    .LineStyle = xlSlantDashDot

    '___

    .Color = RGB(132, 151, 176) 'Çizgi rengi
    .Weight = xlThin 'İnce-çizgi kalınlığı
'    .Weight = xlMedium 'Orta-çizgi kalınlığı
'    .Weight = xlThick 'Kalın-çizgi kalınlığı

End With

End Sub

Özelleştirilmiş kenarlıklar eklemek için aşağıdaki prosedürü inceleyebilirsiniz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet, i As Integer
Dim MyBorder As Range

Set Ws = ThisWorkbook.Worksheets(1)
Set MyBorder = Ws.Range("B2:D12")

ActiveWindow.DisplayGridlines = False 'Aktif sayfada kılavuz çizgilerini gizler
'ActiveWindow.DisplayGridlines = True 'Aktif sayfada kılavuz çizgilerini gösterir

'Belirtilen alanda tüm kenarlıkları kaldırır
MyBorder.Borders.LineStyle = xlNone
MyBorder.Borders(xlDiagonalDown).LineStyle = xlNone
MyBorder.Borders(xlDiagonalUp).LineStyle = xlNone

''Belirtilen alanda en sol-dış kenarlık
'With MyBorder.Borders(xlEdgeLeft)
' .LineStyle = xlContinuous
' .Color = RGB(132, 151, 176) 'Çizgi rengi
' .Weight = xlThin 'İnce-çizgi kalınlığı
'End With
''Belirtilen alanda en sağ-dış kenarlık
'With MyBorder.Borders(xlEdgeRight)
' .LineStyle = xlContinuous
' .Color = RGB(132, 151, 176)
' .Weight = xlThin
'End With
'Belirtilen alanda en üst-dış kenarlık
With MyBorder.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Color = RGB(175, 39, 55)
.Weight = xlMedium
End With
'Belirtilen alanda en alt-dış kenarlık
With MyBorder.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(175, 39, 55)
.Weight = xlMedium
End With
''Belirtilen alanda dikey-iç kenarlık
'With MyBorder.Borders(xlInsideVertical)
' .LineStyle = xlContinuous
' .Color = RGB(0, 0, 0)
' .Weight = xlThin
'End With
'Belirtilen alanda yatay-iç kenarlık
With MyBorder.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Color = RGB(0, 0, 0)
.Weight = xlThin
End With

End Sub

Tablo satırlarını farklılaştırmak için aşağıdaki prosedürü inceleyebilirsiniz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet, i As Integer
Dim MyBorder As Range

Set Ws = ThisWorkbook.Worksheets(1)
Set MyBorder = Ws.Range("B2:D12")

ActiveWindow.DisplayGridlines = False 'Aktif sayfada kılavuz çizgilerini gizler
'ActiveWindow.DisplayGridlines = True 'Aktif sayfada kılavuz çizgilerini gösterir

'Belirtilen alanda tüm kenarlıkları kaldırır
MyBorder.Borders.LineStyle = xlNone
MyBorder.Borders(xlDiagonalDown).LineStyle = xlNone
MyBorder.Borders(xlDiagonalUp).LineStyle = xlNone
'Belirtilen alanda dolguları kaldırır
MyBorder.Interior.Color = xlNone

''Belirtilen alanda en sol-dış kenarlık
'With MyBorder.Borders(xlEdgeLeft)
'    .LineStyle = xlContinuous
'    .Color = RGB(132, 151, 176) 'Çizgi rengi
'    .Weight = xlThin 'İnce-çizgi kalınlığı
'End With
''Belirtilen alanda en sağ-dış kenarlık
'With MyBorder.Borders(xlEdgeRight)
'    .LineStyle = xlContinuous
'    .Color = RGB(132, 151, 176)
'    .Weight = xlThin
'End With
'Belirtilen alanda en üst-dış kenarlık
With MyBorder.Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .Color = RGB(175, 39, 55)
    .Weight = xlMedium
End With
'Belirtilen alanda en alt-dış kenarlık
With MyBorder.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .Color = RGB(175, 39, 55)
    .Weight = xlMedium
End With
''Belirtilen alanda dikey-iç kenarlık
'With MyBorder.Borders(xlInsideVertical)
'    .LineStyle = xlContinuous
'    .Color = RGB(0, 0, 0)
'    .Weight = xlThin
'End With
'Belirtilen alanda yatay-iç kenarlık
With MyBorder.Borders(xlInsideHorizontal)
    .LineStyle = xlContinuous
    .Color = RGB(0, 0, 0)
    .Weight = xlThin
End With

'Satırları renklendirmek (TEK DEĞİŞİKLİK BURADA YAPILDI!)
For i = 2 To 12
    If i Mod 2 = 0 Then   'Satır no.su çift sayı olan satırlar, i'nin 2'ye bölümünden kalanı 0 olanlar
        Ws.Range("B" & i & ":D" & i).Interior.Color = RGB(227, 241, 238)
    ElseIf i Mod 2 <> 0 Then 'Satır no.su tek sayı olan satırlar, i'nin 2'ye bölümünden kalanı 0 olmayanlar
        Ws.Range("B" & i & ":D" & i).Interior.Color = RGB(232, 220, 205)
    End If
Next i

End Sub

5.  Hücrelerin Korunması ve Formüllerin Gizlenmesi

Hücrelerin korunması “Workbook ve Worksheet Nesneleri-1” isimli makalede bulunan “Çalışma Kitabının ve Sayfasının Korunması” isimli alt başlık ile doğrudan ilgili olduğundan söz konusu makaleyi incelemeniz önerilir.

Söz konusu makalede, çalışma kitabının ve sayfaların bir bütün olarak korunmasından bahsedildi. Bir sayfayı korumakla birlikte, sayfanın bazı hücrelerine kullanıcının giriş yapmasını aşağıdaki şekilde sağlayabilirsiniz.

Private Sub CommandButton1_Click()
Dim MyRange As Range, Ws As Worksheet

ThisWorkbook.Worksheets(1).Unprotect "123"

Set Ws = ThisWorkbook.Worksheets(1)
Set MyRange = Ws.Range("A1:A10")
MyRange.Value = "ishakkutlu.com"

MyRange.Locked = False
'MyRange.Locked = True

ThisWorkbook.Worksheets(1).Protect "123"

End Sub

Yukarıdaki resimde yer alan A1 ile A10 arasındaki hücrelere kullanıcı tarafından müdahale edilebilir. Ancak bunlar dışındaki hücreler halen korumalı olup kullanıcının müdahalesine kapalıdır. Eğer kilitli olmayan hücreler kilitlenmek istenirse de MyRange.Locked = False satırında yer alan False değerini True yapmanız yeterli olacaktır.

Hücre kilidini manuel olarak açmak veya kapatmak için ilgili hücreleri seçiniz ve sağ tık yaparak Hücre Biçimlendir (Format Cells) yolunu izleyiniz. Açılan pencerede Koruma (Protect) sekmesinde yer alan Kilitli (Locked) alanında yer alan tik işaretini kaldırabilir veya ekleyebilirsiniz. Böylece seçili hücreler için korumayı aktif edebilir veya iptal edebilirsiniz. Ancak değişikliklerin geçerli olabilmesi için Sayfa (hücre değil) korumasının aktif olması gerektiğini tekrar hatırlatmakta yarar var. Konuyla ilgili olarak aşağıdaki ekran görüntülerini inceleyebilirsiniz.

Hücre formülünü–içeriğini formül çubuğunda gizlemek için hücre kilidinde olduğu gibi sayfa korumasının aktif olması ön koşuldur. Konuyla ilgili olarak aşağıdaki prosedürü inceleyebilirsiniz.

Private Sub CommandButton1_Click()
Dim MyRange As Range, Ws As Worksheet

ThisWorkbook.Worksheets(1).Unprotect "123"

Set Ws = ThisWorkbook.Worksheets(1)
Set MyRange = Ws.Range("A1:A10")
MyRange.Value = "ishakkutlu.com"

MyRange.FormulaHidden = True
'MyRange.FormulaHidden = False

ThisWorkbook.Worksheets(1).Protect "123"

End Sub

Aşağıdaki resimde gösterildiği gibi formülü gizlenen hücrelerin formül çubuğunda hücre değeri de (varsa) formülü de görünmeyecektir.

Uyarı!

Formüllerin gizlendiği durumda, sayfa koruması aktif değil veya sayfa koruması aktif olmakla birlikte formüllerin gizlendiği hücrelerin hücre kilidi aktif değilse, söz konusu hücrelere fare ile çift tıklarsanız hücredeki değer/formül silinir.

 

 

İshak Kutlu, VBA Notları

Yorum Yap

İshak Kutlu

Veri & Otomasyon Uzmanı

Kurumsal iş akışlarını düzenleyen veri odaklı otomasyon sistemleri ve makine öğrenmesi tabanlı çözümler geliştirir. Gerçek operasyonel süreçler için ölçeklenebilir ve izlenebilir yapılar tasarlar.

YouTube   YouTube   YouTube   YouTube