Öncelikle kayıt yapılacak sayfanın varlığı kontrol ediliyor. Yoksa oluşturuluyor ve dosya her açıldığında sayacı ve açan kullanıcı bilgisini güncelleyerek mesaj olarak bildiriyor. Bunları yaptıktan hemen sonra da çalışma kitabını kaydediyor.
Option Explicit
Private Sub Workbook_Open()
SayfaKontrol
Dim ws As Worksheet
Set ws = Worksheets("calismaKitabiData")
ws.Range("A1").Value = ws.Range("A1").Value + 1
ws.Range("B1") = Application.UserName
MsgBox "Dosyanın Açılma Sayısı: " & ws.Range("A1").Value & vbCrLf & _
"En Son Açan Kullanıcı: " & ws.Range("B1"), , "BİLGİ"
ThisWorkbook.Save
End Sub
'--------------------------------------------------
'Kayıtları tutacağımız sayfanın olup
'olmadığını kontrol etmeye yarayan makro.
'--------------------------------------------------
Private Sub SayfaKontrol()
Dim sayfa_adi As String
Dim syf As Worksheet
Dim sayac As Byte
sayfa_adi = "calismaKitabiData"
For Each syf In ThisWorkbook.Sheets
If syf.Name = sayfa_adi Then
Exit Sub
Else
sayac = sayac + 1
End If
Next
If sayac > 0 Then
Sheets.Add
ActiveSheet.Name = sayfa_adi
ActiveSheet.Visible = False
End If
End Sub
Option Explicit
Private Sub Workbook_Open()
'--------------------------------------------------
'İlk önce sayfa var mı yok mu
'kontrol et, yoksa oluştur bir tane.
'--------------------------------------------------
SayfaKontrol
'--------------------------------------------------
'Bizim calismaKitabiData sayfasını
'değişkene atayarak kodun gereksiz
'yere uzamasını önlemek için Worksheet
'tipinde değişken oluşturdum.
'--------------------------------------------------
Dim ws As Worksheet
'--------------------------------------------------
'ws değişkenimize sayfamızı atadık.
'Böylelikle her seferinde
'Worksheets("calismaKitabiData")
'yazmak yerine ws yazıp geçeceğim.
'--------------------------------------------------
Set ws = Worksheets("calismaKitabiData")
'--------------------------------------------------
'Sayaç güncellemesini yap.
'--------------------------------------------------
ws.Range("A1").Value = ws.Range("A1").Value + 1
'--------------------------------------------------
'Kullanıcı güncellemesini yap.
'--------------------------------------------------
ws.Range("B1") = Application.UserName
'--------------------------------------------------
'Kitap açıldığında güncellenmiş bilgileri
'kullanıcıya mesaj olarak göster.
'--------------------------------------------------
MsgBox "Dosyanın Açılma Sayısı: " & ws.Range("A1").Value & vbCrLf & _
"En Son Açan Kullanıcı: " & ws.Range("B1"), , "BİLGİ"
'--------------------------------------------------
'Bu işlemlerin hemen ardından kitabı
'kaydet, sonra hata olmasın.
'--------------------------------------------------
ThisWorkbook.Save
End Sub
'--------------------------------------------------
'Kayıtları tutacağımız sayfanın olup
'olmadığını kontrol etmeye yarayan makro.
'--------------------------------------------------
Private Sub SayfaKontrol()
'--------------------------------------------------
'Kayıt yapacağımız sayfanın ismini
'belirledikten sonra bu değişkene atayacağız.
'--------------------------------------------------
Dim sayfa_adi As String
'--------------------------------------------------
'For Each döngüsü için kullanacağız bu değişkeni.
'Sayfaları kontrol edeceğiz tek tek.
'--------------------------------------------------
Dim syf As Worksheet
'--------------------------------------------------
'Sayfanın var olup olmadığını bu
'sayaç değişkenimizle öğreneceğiz.
'--------------------------------------------------
Dim sayac As Byte
'--------------------------------------------------
'Sayfa adını belirledik.
'--------------------------------------------------
sayfa_adi = "calismaKitabiData"
'--------------------------------------------------
'Değişkene başlangıç değeri atadık.
'--------------------------------------------------
sayac = 0
'--------------------------------------------------
'Şimdi mevcut sayfaları tek tek kontrol edeceğiz.
'--------------------------------------------------
For Each syf In ThisWorkbook.Sheets
'--------------------------------------------------
'Sayfamız varsa çalışacak şart.
'--------------------------------------------------
If syf.Name = sayfa_adi Then
'--------------------------------------------------
'Sayfamız varsa işlem yapmaya gerek yok demektir,
'kodun çalışmasına gerek kalmadığından Sub
'yordamdan çıkış yapabiliriz.
'--------------------------------------------------
Exit Sub
'--------------------------------------------------
'Eğer sayfa yoksa bu kısım çalışacak.
'--------------------------------------------------
Else
'--------------------------------------------------
'Sayacı 1 artırdık. Eğer Else kısmı çalışmamış
'olsaydı sayac sıfır olarak kalacaktı. Sayacın
'artması istediğimiz isimde sayfanın mevcut
'olmadığının bir göstergesi.
'--------------------------------------------------
sayac = sayac + 1
End If
Next
'--------------------------------------------------
'Madem sayac değişkeni sayfanın olmadığını
'anlamamıza yardımcı oldu, o halde sayfa
'oluşturalım.
'--------------------------------------------------
If sayac > 0 Then
'--------------------------------------------------
'Sayfa oluşturma kodu.
'--------------------------------------------------
Sheets.Add
'--------------------------------------------------
'Sayfamıza yukarıda belirlediğimiz
'ismi verdik. Tabii dinamik oldu
'değişken olarak verince.
'--------------------------------------------------
ActiveSheet.Name = sayfa_adi
'--------------------------------------------------
'Sayfanın görünür olmasına gerek
'duymadığımdan dolayı gizledim.
'--------------------------------------------------
ActiveSheet.Visible = False
End If
End Sub