2015-12-09 8 views
1

Для целей тестирования допустим, что код для разблокировки книги равен 1. Я хочу, чтобы окно ввода отображалось при открытии, если пользователь вводит неправильный код/​​Или выбирает отмену на поле ввода, затем рабочая книга закрывается.Добавление безопасности в мою рабочую книгу с использованием VBA

Private Sub Workbook_Open() 

ActiveSheet.Range("A1").Activate 

Code = Application.InputBox("Enter School Code", CancelCode) 

    If Code <0> 1 Or False Then 
    Code = Int(1) 
     MsgBox ("Unrecognised Code") 

Application.Workbooks("CODING.xlsm").Close 'False 

    End If 

End Sub 

На данный момент он появляется, но работает если введено число, а также закрывает окно ввода и позволяет получить доступ, если отменить нажата.

+0

Ваш 'If Code < 0 > 1 Или False Тогда' неверно (это допустимый синтаксис, но, вероятно, он не делает то, что, по вашему мнению, будет). Вы должны повторять код каждый раз, как в 'Ìf Code < 0 Or Code > 1 Или Code = False Then'. И почему бы вам просто не проверить Code angaist хорошее значение, например 'If Code <> 1 Then'? –

+0

Vincent, что меня смущает, используя синтаксис If Code < 0 > 1 Или False Затем я работал в течение определенного периода времени до тех пор, пока не произошло удаление, и мне пришлось выполнить код, я попробовал <> 1, но снова принял число вложенный? –

ответ

2

Попробуйте это:

Private Sub Workbook_Open() 
    Dim Code As Variant 
    Code = Application.InputBox("Enter School Code", CancelCode) 
    If Not Code = 1 Then 
     MsgBox ("Unrecognised Code") 
     ThisWorkbook.Close SaveChanges:=False 
    End If 
End Sub 

Просто тестировал, и это работает для меня.

Я должен добавить, однако, что это чрезвычайно низкоуровневая безопасность, которую можно обойти любым, кто обладает даже рудиментарным знанием VBA. Вам просто нужно установить Application.EnableEvents = False в другую книгу (или в окне VBA Immediate), прежде чем открывать вашу книгу, а событие Workbook_Open не будет запускаться вообще.

+0

Вы также можете просто удерживать кнопку shift во время открытия рабочей книги, чтобы отключить запуск любого открытого кода. –

+0

@chris Это прекрасно работает. Я знаю, что это очень просто, хотя он не используется строго как функция безопасности. Это больше инструмент для персонализации рабочей книги, поскольку я планирую иметь разные коды для разных людей, которые затем вызывают другие макросы. я просто нуждался в том, чтобы получить фундаментальную часть правильно, большое спасибо –

+2

Мэтью, пожалуйста. Однако предложение: если вы хотите, чтобы разные люди видели разные вещи, вы могли бы использовать переменную 'Environ (« UserName »)'. Например 'Select Case Environ ("UserName")/ Дело "Мэтью Бонд"/ Msgbox "Владелец этого документа"/ Case "Джо Bloggs"/ Msgbox "Кто-то"/ End Select' (/ символы, представляющие разрывы строк) –

Смежные вопросы