Form üzerinden koşullu sayfa görme

Katılım
10 Mayıs 2011
Mesajlar
5
Excel Vers. ve Dili
unknown
Merhaba,

Form üzerinden kullanıcı adı şifre ile girilecek. 5 kullanıcı var 1 admin.
Admin giriş yaptığında tüm sayfalar normal açılacak. Kullanıcılar giriş yaptığında sadece kendi sayfasını görebilecek.

If (tb_mail.Text = "Kullanici1") Then

Sayfa1.Visible = False
Sayfa3.Visible = False
Sayfa4.Visible = False
Sayfa5.Visible = False
Sayfa6.Visible = False

End If

Bu şekilde halihazırda kullanıyorum fakat. 55 kullanıcılı bir form oluşturmam lazım. Bunun için for döngüsü oluşturuyorum fakat

For i = 1 To Sheets.Count
Sheets(i).Visible = False
Next

Sayfa2.Visible = True

Worksheet sınıfının Visible özelliği kurulamıyor hatası alıyorum. Bu sorunun çözümü için yardımcı olursanız çok sevirinim. Yoksa 55 komutu her sayfa için tek tek yazmam gerekecek.
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,483
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Sorunun Çözümü
  1. Sayfa Görünürlüğü Ayarlamak:
    Excel VBA'da Sheets(i).Visible özelliği genellikle görünürlük ayarları için kullanılır. Ancak, Visible özelliğinin xlSheetVisible, xlSheetHidden ve xlSheetVeryHidden gibi sabitlerle ayarlanması gerekir. Bu sabitler yerine doğrudan True/False kullanmak hata almanıza neden olabilir.
  2. For Döngüsü Kullanarak Sayfaları Gizleme:
    Eğer Sheets(i).Visible özelliği kurulamıyorsa, xlSheetVisible ile xlSheetHidden sabitlerini kullanarak görünürlüğü ayarlamanız gerekir. Ayrıca, Sheets koleksiyonunda Worksheets koleksiyonunu kullanabilirsiniz.


    Sub SetPageVisibility()
    Dim ws As Worksheet
    Dim username As String

    username = tb_mail.Text ' Kullanıcı adı giriş kutusundan alınır

    ' Tüm sayfaları gizle
    For Each ws In ThisWorkbook.Worksheets
    ws.Visible = xlSheetHidden
    Next ws

    ' Belirli sayfayı görünür yap
    Select Case username
    Case "Kullanici1"
    Worksheets("Sayfa2").Visible = xlSheetVisible
    Case "Kullanici2"
    Worksheets("Sayfa3").Visible = xlSheetVisible
    ' Diğer kullanıcılar için case ekleyin
    Case "Admin"
    ' Admin tüm sayfaları görmeli
    For Each ws In ThisWorkbook.Worksheets
    ws.Visible = xlSheetVisible
    Next ws
    Case Else
    ' Tanınmayan kullanıcılar için opsiyonel kod
    MsgBox "Kullanıcı tanınmıyor."
    End Select
    End Sub

  3. Açıklamalar:
    • xlSheetVisible: Sayfanın görünür olduğunu belirtir.
    • xlSheetHidden: Sayfanın gizlendiğini belirtir. Bu durumda sayfa Excel'de görülebilir ancak bazı kullanıcılar tarafından erişilebilir değil.
    • xlSheetVeryHidden: Sayfa, VBA editörü aracılığıyla bile görünmez; yalnızca VBA kodu ile erişilebilir.
  4. Performans ve Yönetim:

    • Kodunuzu daha verimli hale getirmek için, sayfa adlarını doğrudan yazmak yerine, sayfa adlarını ve kullanıcı adlarını bir veri yapısında saklayabilirsiniz. Bu, kodun bakımını ve yönetimini kolaylaştırabilir.

      Dim userPages As Object
      Set userPages = CreateObject("Scripting.Dictionary")

      ' Kullanıcıya göre sayfa eşleştirmelerini yapın
      userPages.Add "Kullanici1", "Sayfa2"
      userPages.Add "Kullanici2", "Sayfa3"
      ' Diğer kullanıcılar için ekleyin

      ' Kullanıcı adı al
      username = tb_mail.Text

      ' Sayfa görünürlüğünü ayarla
      For Each ws In ThisWorkbook.Worksheets
      ws.Visible = xlSheetHidden
      Next ws

      If userPages.Exists(username) Then
      Worksheets(userPages(username)).Visible = xlSheetVisible
      ElseIf username = "Admin" Then
      For Each ws In ThisWorkbook.Worksheets
      ws.Visible = xlSheetVisible
      Next ws
      Else
      MsgBox "Kullanıcı tanınmıyor."
      End If
Bu kod parçacıkları ve açıklamalar, Excel VBA kullanarak kullanıcıların erişim haklarını ayarlamanızda size yardımcı olacaktır. Kodunuzu test etmeyi ve gerektiğinde ayarlamalar yapmayı unutmayın.
 
Katılım
10 Mayıs 2011
Mesajlar
5
Excel Vers. ve Dili
unknown
Cevabınız karşısında saygıyla eğiliyorum üstadım. Sayenizde yeni birşey daha öğrendim. Emeğinize sağlık çok teşekkür ederim.
 
Üst