Ortak alanda bulunan excel dosyasına erişim kısıtlama

Katılım
12 Aralık 2023
Mesajlar
55
Excel Vers. ve Dili
2019
Selamlar herkese iyi forumlar,
Fileserver ortak alanda bulunan bir klasörümüzün içine hesaplama yapmak için excel oluşturduk. bu excele kullanıcılar 2 farklı bilgisayardan değer girebilecek. ancak eş zamanlı açılmasını istemiyoruz. bir pcde açıkken diğerinde açılmasın. Salt okunur modda açılmasını da istemiyoruz. Mümkünse uyarı alsın açmaya çalışan kullanıcı
 
Katılım
6 Kasım 2004
Mesajlar
283
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
25-07-2023
Merhaba,

Aşağıdaki kodu deneyip sonucu paylaşır mısınız?

VBA (Visual Basic for Applications) kodu kullanma:
Excel dosyasına bir VBA kodu ekleyerek, dosyanın açılışında ve kapanışında özel bir kontrol mekanizması oluşturabilirsiniz.

İşte bu yaklaşımı uygulayacak bir VBA kodu örneği:



Kod:
' Bu modülü ThisWorkbook modülüne ekleyin
Private Const lockFileName As String = "DosyaKilidi.lock"
Private Const lockFilePath As String = "\\FileServerPath\OrtakKlasor\"

Private Sub Workbook_Open()
    If Not CreateLockFile Then
        MsgBox "Bu dosya şu anda başka bir kullanıcı tarafından kullanılıyor. Dosya kapatılacak.", vbExclamation
        ThisWorkbook.Close SaveChanges:=False
    End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    DeleteLockFile
End Sub

Private Function CreateLockFile() As Boolean
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    If Not fso.FileExists(lockFilePath & lockFileName) Then
        fso.CreateTextFile lockFilePath & lockFileName
        CreateLockFile = True
    Else
        CreateLockFile = False
    End If
End Function

Private Sub DeleteLockFile()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    If fso.FileExists(lockFilePath & lockFileName) Then
        fso.DeleteFile lockFilePath & lockFileName
    End If
End Sub
```

Bu kodu Excel dosyanızın VBA editöründe "ThisWorkbook" modülüne eklemeniz gerekiyor. İşte kodun nasıl çalıştığına dair açıklama:

1. Dosya açıldığında, `Workbook_Open()` olayı tetiklenir ve `CreateLockFile()` fonksiyonu çağrılır.
2. `CreateLockFile()` fonksiyonu, belirtilen yolda bir kilit dosyası oluşturmaya çalışır.
3. Eğer kilit dosyası zaten varsa (yani dosya başka bir kullanıcı tarafından açıksa), kullanıcıya bir uyarı mesajı gösterilir ve dosya kapatılır.
4. Dosya başarıyla açılırsa, kilit dosyası oluşturulur ve kullanıcı dosyayı düzenleyebilir.
5. Dosya kapatıldığında, `Workbook_BeforeClose()` olayı tetiklenir ve `DeleteLockFile()` fonksiyonu çağrılarak kilit dosyası silinir.

Bu çözümü uygulamak için:

1. Excel dosyanızı açın.
2. ALT + F11 tuşlarına basarak VBA editörünü açın.
3. Proje penceresinde "ThisWorkbook" öğesini çift tıklayın.
4. Açılan kod penceresine yukarıdaki kodu yapıştırın.
5. `lockFilePath` değişkenini, dosyanızın bulunduğu gerçek ağ yolu ile değiştirin.
6. Dosyayı makro-etkin bir Excel dosyası olarak kaydedin (.xlsm uzantılı).

Bu çözüm, dosyanın eş zamanlı açılmasını engelleyecek ve kullanıcılara uyarı verecektir. Ayrıca, dosya salt okunur modda açılmayacak, sadece ilk açan kullanıcı düzenleme yapabilecektir.

Bu yaklaşımın bazı sınırlamaları olduğunu unutmayın:
- Kullanıcıların makroları etkinleştirmesi gerekiyor.
- Ağ bağlantısı kesilirse veya Excel düzgün kapatılmazsa, kilit dosyası silinmeyebilir.
 
Katılım
11 Temmuz 2024
Mesajlar
70
Excel Vers. ve Dili
Excel 2021 Türkçe
Merhaba, şöyle çözüme ulaşabilirsiniz;


Kod:
Private Sub Workbook_Open()
    If ThisWorkbook.ReadOnly = True Then
        MsgBox "Bu dosya şu anda başka bir kullanıcı tarafından kullanılmaktadır. Lütfen daha sonra tekrar deneyiniz.", vbExclamation, "Dosya Kullanımda"
        ThisWorkbook.Close False
    End If
End Sub
 
Katılım
6 Mart 2024
Mesajlar
99
Excel Vers. ve Dili
Excel 2010 TR & Excel 2016 TR
Salt okunur modda açılmasını da istemiyoruz.
Merhaba,
Kodlar ( ActiveWorkbook.UserStatus )
Excel 2016 ve öncesi çalışmakta
Yeni Excel
sürümlerde iptal edildiğinden çalışmayacaktır.

C++:
Private Sub Workbook_Open()
    Dim userInfo As Variant
   
    ' Paylaşılan çalışma kitabındaki kullanıcıları kontrol et
    userInfo = ActiveWorkbook.UserStatus
   
    ' Kullanıcı sayısını kontrol et
    If UBound(userInfo) > 1 Then ' Eğer 1'den fazla kullanıcı varsa
        MsgBox "Bu dosya başka bir kullanıcı tarafından kullanılmakta. Dosya kapatılacak.", vbExclamation
        ActiveWorkbook.Close SaveChanges:=False ' Değişiklikleri kaydetmeden dosyayı kapat
    End If
End Sub
sonra

Excel Menüden - Gözden Geçir - Çalışma Kitabını Paylaş tıklayıp
Aynı anda birden fazla kullanıcının değişiklik......
kutusunu işaretliyoruz
Tamam - Tamam tıklıyoruz
( dosyayı sahte paylaşıma açarak Salt Okunur uyarısıyla karşılaşmıyoruz )

dosyayı 2. bir kullanıcı açtığın da Mesaj verip dosyayı kapatacaktır.
 
Son düzenleme:
Üst