Я установил некоторые разрешения, поэтому обычные пользователи не могут видеть все листы в Excel, и только администратор может просматривать все (код ниже). Когда я регистрируюсь как Администратор и нажимаю на кнопку, установленную на странице «Супервизоры», все отлично работает. Если я делаю это с обычным пользователем, он говорит следующую ошибку
переменная объекта или объект не установлен
и помечает Load UserForm1
на macro_click ниже. Я не могу найти, что не так или что не хватает. Мне нужна большая рука, потому что за несколько дней до этого она работала нормально, но теперь она сломалась ...
Кнопка с макросом установлена на странице, где кнопка отображается. И код для входа в пользовательскую форму 1.
Private Sub btnEntrar_Click()
'Declare the variables
Dim AddData As Range, AddData2 As Range, AddData3 As Range, Current As Range
Dim Code As Variant
Dim PName As Variant, AName As Variant, UName As Variant
Dim ws As Worksheet, ws2 As Worksheet, ws3 As Worksheet, ws4 As Worksheet, ws5 As Worksheet, ws6 As Worksheet
Dim result As Integer
Dim TitleStr As String
Dim msg As VbMsgBoxResult
Dim LogsUsuarios As Worksheet
'Set the pages variables
Set ws = Worksheets("Inicio")
Set ws2 = Worksheets("Supervisores")
Set ws3 = Worksheets("Registros")
Set ws4 = Worksheets("Ingreso")
Set ws5 = Worksheets("LogsUsuarios")
Set ws6 = Worksheets("LookupList")
Set LogsUsuarios = Hoja6
'Variables
user = Me.txtUser.Value
Code = Me.txtPass.Value
TitleStr = "Password check"
result = 0
Set Current = ws4.Range("M3")
'Error handler
On Error GoTo errHandler:
'Destination location for login storage
Set AddData = ws5.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0)
Set AddData2 = ws5.Cells(Rows.Count, 5).End(xlUp).Offset(1, 0)
Set AddData3 = ws5.Cells(Rows.Count, 8).End(xlUp).Offset(1, 0)
'Check the login and passcode for the Administrator
If user <> "" And Not IsNumeric(user) And Code <> "" Then
For Each AName In ws4.Range("R4:R6")
'If AName = Code Then 'Use this for passcode text
If AName = Code And AName.Offset(0, -1) = user Then ' Puede usar texto Y números
MsgBox "Inicio como Administrador de: " & user
'record user login
AddData.Value = user
AddData.Offset(0, 1).Value = Now
'Add usernmae to the worksheet
Current.Value = user
'Change variable if the condition is meet
result = 1
'Unload the form
ws.Visible = True 'Cambiar para que lo tome de la tabla de permisos y no manual como ahora, usar el cod de abajo
ws2.Visible = True
ws3.Visible = True
ws4.Visible = True
ws5.Visible = True
ws6.Visible = True
Unload Me
'sort the Registros by "Último Ingreso"
Hoja6.Select
With LogsUsuarios
.Range("C4:C1000").Sort Key1:=Range("C4"), Order1:=xlDescending, Header:=xlGuess
End With
ws4.Select 'Dirigirme a la pagina "Ingreso"
Exit Sub
End If
Next AName
End If
'Check user login with loop
If user <> "" And Not IsNumeric(user) And Code <> "" Then
For Each UName In ws4.Range("R11:R19")
'If UName = Code Then 'Use this for passcode text
If UName = Code And UName.Offset(0, -1) = user Then ' Puede usar texto Y números
MsgBox "Ingreso satisfactorio para: " & user
'record user login
If user = "MCARULO" Then
AddData2.Value = user
AddData2.Offset(0, 1).Value = Now
'record user login
ElseIf user = "BRAVO" Then
AddData3.Value = user
AddData3.Offset(0, 1).Value = Now
Else
AddData.Value = user
AddData.Offset(0, 1).Value = Now
End If
'Add user to the worksheet
Current.Value = user
Set PName = Hoja2.Range("E:E").Find(What:=user, LookIn:=xlValues)
'unhide worksheet for user
If PName.Offset(0, 2) = "Inicio" Then
'Set ws = Worksheets(PName.Offset(0, 2).Value)
ws.Visible = True
End If
If PName.Offset(0, 3) = "Supervisores" Then
'Set ws2 = Worksheets(PName.Offset(0, 3).Value)
ws2.Visible = True
ws2.Select 'Se cambia la pantalla a este para los Supervisores
'Inicio Automático el Multi
'InicioSuperv
End If
If PName.Offset(0, 4) = "Registros" Then
'Set ws3 = Worksheets(PName.Offset(0, 3).Value)
ws3.Visible = True
End If
If PName.Offset(0, 5) = "Ingreso" Then
'Set ws4 = Worksheets(PName.Offset(0, 4).Value)
ws4.Visible = True
ws4.Select 'Se cambia la pantalla a este para RRHH
End If
If PName.Offset(0, 6) = "LogsUsuarios" Then
'Set ws5 = Worksheets(PName.Offset(0, 5).Value)
ws5.Visible = True
End If
If PName.Offset(0, 7) = "LookupList" Then
'Set ws5 = Worksheets(PName.Offset(0, 5).Value)
ws6.Visible = True
End If
'show sheet tab if hidden
ActiveWindow.DisplayWorkbookTabs = True
'Change variable if the condition is meet
result = 1
'Unload the form
Unload Me
'sort the Registros by "Último Ingreso"
Hoja6.Select
With LogsUsuarios
.Range("C4:C1000").Sort Key1:=Range("C4"), Order1:=xlDescending, Header:=xlGuess
End With
'Esconde la Hoja Nuevamente
ws5.Visible = xlSheetVeryHidden
Exit Sub
End If
Next UName
End If
Private Sub cmdMacro2_Click() 'Inicia en el Inicio Gral
Load UserForm1: UserForm1.MultiPage1.Value = 0: UserForm1.Show vbModeless
If UserForm1.MultiPage1.Value = 0 Then
'Desactiva los botones del inicio que no correspondan para los supervisores}
UserForm1.inicioNR.Enabled = False
UserForm1.inicioBD.Enabled = False
'Desabilita las páginas que no pueden utilizar los supervisores
'UserForm1.MultiPage1.Pages(0).Enabled = False
UserForm1.MultiPage1.Pages(1).Enabled = False
UserForm1.MultiPage1.Pages(2).Enabled = False
End If
End Sub