درود
در خصوص سوالی که دوستان مطرح کردند مبنی بر اینکه برای کاربر بیش از یک شیت در نظر بگیریم دو راهکار به ذهنم رسید
1- تعیین شیت های هر کاربر در شیت protectdata به نحوی که با پیمایش ردیف هر کاربر شیت مربوطه باز بشه
2- استفاده از یک قاعده نامگذاری برای شیت ها
کد زیر برای راه حل دوم نوشته شده دوستان باید این کد رو جایگزین کدی که برای کلید login یوزر فرم یک نوشته شده کنند
کد PHP:
Private Sub CommandButton1_Click()
Dim PassWord As String
Dim user As String
Dim ws As Worksheet
user = ComboBox1.Value
PassWord = TextBox1.Value
If user = "" Or PassWord = "" Then
MsgBox "Enter name and password"
Exit Sub
End If
If PassWord = WorksheetFunction.VLookup(user, Range("List"), 2, 0) Then
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "Welcome" And ws.Name <> "Protectdata" Then
On Error GoTo handler
If user = Mid(ws.Name, 1, Application.WorksheetFunction.Find("-", ws.Name, 1) - 1) Then
Sheets(ws.Name).Visible = xlSheetVisible
End If
End If
handler:
If Err = 1004 Then
MsgBox "The name of sheet is wrong"
Exit Sub
End If
Next
MsgBox "Password Accepted"
UserForm1.Hide
ElseIf counter <= 3 Then
MsgBox "Try Again"
counter = counter + 1
TextBox1.Value = ""
Exit Sub
Else
MsgBox "Password Not Accepted, Workbook will close"
Unload Me
ThisWorkbook.Close
End If
ComboBox1.Value = ""
TextBox1.Value = ""
End Sub
اما برای اینکه کدها به درستی کار کنند قواعدی باید رعایت بشه
در فایل مشاهده میکنید که نام شیت ها به صورت User1,User2,User3 نامگذاری شده با این فرض که هر کاربر ممکنه تعداد شیت بیشتری داشته باشه نامگذاری به شیوه زیر خواهد بود
User1-1
User2-1
User3-1
بنابر این گر user1 شیت های دیگری نیاز داشته باشه به شکل زیر خواهد بود
User1-2
User1-3
و....
برای سایر کاربران هم به همین نحو
در صورتی که این قاعده راعایت نشه پیغام زیر صادر خواهد شد
کد PHP:
The name of sheet is wrong
سوالی بود در خدمتم
علاقه مندی ها (Bookmarks)