Если я разрешу raw_input, то это не Josh или что-нибудь еще. Это переменная, я думаю, но я не понимаю ее бросок: - (
blockquote>Функция raw_input запрашивает ввод и возвращает это как строку. Это, безусловно, сработало для меня. не нужен простой. Просто откройте «подсказку DOS» и запустите программу.
Это то, на что мне было похоже:
C:\temp>type test.py print "Halt!" s = raw_input("Who Goes there? ") print "You may pass,", s C:\temp>python test.py Halt! Who Goes there? Magnus You may pass, Magnus
Я набираю свое имя и нажал
[Enter
] после того, как программа напечатала «Кто идет туда?»
Насколько я могу судить, невозможно изначально пометить один лист как не подлежащий удалению; и нет события, которое может быть использовано для обнаружения, когда лист собирается быть удален, чтобы книга могла быть защищена превентивно.
Однако, вот один из возможных способов:
Конечно, пользователям придется привыкнуть к этому способу удаления листов (а не просто щелкнуть правой кнопкой мыши> Удалить на вкладке листа). Тем не менее, это не сумасшествие сложно.
Что касается того, как достичь # 2, т. е. поддерживать этот список имен листов, я полагаю, вы могли бы использовать UDF, подобный этому (его нужно вызывать как формулу массива):
Function DeletableSheetNames() As String()
Application.Volatile
Dim i As Long
Dim sn() As String
With ThisWorkbook
ReDim sn(1 To .Sheets.Count)
For i = 1 To .Sheets.Count
With .Sheets(i)
If .Name = "DataEntry1" Or .Name = "DataEntry2" Then
'Don't include it in the list.
Else
sn(i) = .Name
End If
End With
Next i
End With
DeletableSheetNames = sn
End Function
Вы не можете запретить пользователям удалять определенный лист, но вы можете использовать событие Workbook_BeforeSave()
, чтобы предотвратить сохранение книги, если отсутствует конкретный лист. Документация по этому событию точно показывает, как разрешить экономию рабочей книги только при выполнении определенных условий. См. http://msdn.microsoft.com/en-us/library/office/ff840057 (v = office.14) .aspx
Я могу предотвратить удаление листа через событие Worksheet_BeforeDelete следующим образом:
Private Sub Worksheet_BeforeDelete()
Call ThisWorkbook.Protect("password")
Call MsgBox("This sheet cannot be deleted.", vbExclamation)
End Sub
Это защищает все листы от удаления, однако, если вы добавите код события в модуль ThisWorkbook, как показано ниже :
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Call ThisWorkbook.Unprotect("password")
End Sub
Затем я смогу удалить любой другой лист, как только он будет выбран.
Помните, что вы потеряете функцию копирования и вставки между страницами из-за разблокировка страницы, когда она выбрана.
Я нашел это решение, похожее на Dan's, на ExtendOffice.com. Поместите этот код в модуль Worksheet:
Private Sub Worksheet_Activate()
ThisWorkbook.Protect "yourpassword"
End Sub
Private Sub Worksheet_Deactivate()
ThisWorkbook.Unprotect "yourpassword"
End Sub
Когда вы активируете лист, о котором идет речь, вся рабочая книга защищена, а опция «Удалить» недоступна. Когда вы переключаетесь на любой другой лист, рабочая книга снова бесплатна. Это тонко, потому что вы только замечаете изменение, когда идете на «безопасный» лист.