Сделать листы видимыми только для определенных пользователей - PullRequest
0 голосов
/ 22 января 2019

Мне нужен ваш совет, так как я не могу понять, как заставить его работать. У меня есть рабочий лист, который начинается с формы входа в систему, чтобы запросить идентификацию пользователя. Теперь, основываясь на этом имени пользователя, я бы хотел, чтобы только некоторые рабочие листы были видны, а остальные скрыты. Однако когда я больше не могу ввести имя пользователя или имя пользователя, но все листы видны - как я могу заставить его работать должным образом?

, поскольку я не мог заставить его работать для определенного пользователя, я попытался увидеть в приведенном ниже коде, могу ли я ограничить листы для всех пользователей, но даже это не сработало. Прежде чем биться головой об стену, обращаясь к вашим советам, заранее большое спасибо за вашу помощь:)))

Option Explicit

Private Sub Login_Initialize()
End Sub

Private Sub Label1_Click()

End Sub

Private Sub LoginButton_Click()
If Me.IntranetID.Value = "Admin" Or Me.IntranetID.Value = "user1" Or Me.IntranetID.Value = "user2" Or Me.IntranetID.Value = "user3" then
LoginFlag = True

Worksheets("excel1").Visible = True
Worksheets("excel2").Visible = True
Worksheets("excel3").Visible = True
Worksheets("excel4").Visible = True

Dim strIntranetID As String
Dim strText As String
Dim wksDestination As Worksheet

strSheetName = IntranetID.Value
Set wksDestination = Worksheets("Excel1")
strText = IntranetID.Text
wksDestination.Activate
wksDestination.Range("B46").Value = strText

Worksheets("Excel2").Activate "this is to make the user to start from the main sheet"

Unload Me
Exit Sub
End If
MsgBox "You are not authorised to use this Workbook"
End Sub
Private Sub UserForm_Click()
End Sub

Я бы хотел, чтобы приведенный выше код по-прежнему разрешал 1) форму входа в систему 2) позволять пользователю видеть только определенные листы, т. Е. Пользователь 1 может видеть Excel 2 и Excel 3 и т. Д. 3) Я бы хотел, чтобы пользователь запускался в Excel 2, поскольку это основной лист.

1 Ответ

0 голосов
/ 22 января 2019

Всегда должен быть хотя бы один видимый лист, поэтому создайте пустой лист для показа неавторизованным пользователям. Вам нужно запустить процедуру в конце рабочей книги, чтобы скрыть все, кроме этого листа. Затем On_open показать форму входа и запросить ID. На основании этого ответа отобразите соответствующие листы и скройте лист по умолчанию

 Sub WorkBook_Open()
 UserForm("login").Show
 End Sub

 Sub WorkBook_BeforeClose()
 Dim ws as worksheet
 For each ws in worksheets
     select case ws.index 
          case is =  1  'assume default sheet is index 1
              ws.visible = xlsheetvisible
          case else
              ws.visible = xlsheetveryhidden
      end select
   next ws
  end sub

В форме вы можете использовать аналогичный процесс, чтобы скрывать и отображать листы - просто помните, что всегда должен быть виден один лист, поэтому не пытайтесь ничего скрыть, прежде чем сделать лист видимым.

Вам также нужно защитить паролем редактор VBA, если вы хотите, чтобы пользователи не просто отображали листы оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...