Страницы: 1
RSS
Копирование ячейки меняет формат на защищенном листе
 
Всем добрый вечер!
Возник очередной вопрос - если на защищенном листе (защита от пользователя, но не от макросов) скопировать ячейку с одним размером шрифта в ячейку с другим размером шрифта - то размер шрифта во второй ячейке тоже меняется!!
Как устранить этот нежелательный эффект, ведь лист защищён, и формат в каждой ячейке надо бы сохранить...
 
Не копировать, а присваивать значение одной ячейки значению другой. Или использовать PastSpecial(xlPasteValues) вместо Past. Но первый способ проще
 
Нет, я имею ввиду копирование не макросом, а CTRL+C - CTRL+V. Мне нужно защититься от пользователей, чтобы они таким способом не рушили размеры шрифтов в ячейках.
 
Цитата
JerkRandy написал: на защищенном листе (защита от пользователя, но не от макросов)
Цитата
JerkRandy написал: копирование не макросом, а CTRL+C - CTRL+V.
это как?
 
Ну вот я не знаю как, лист вроде защищен, ниче менять нельзя, но если выделить одну ячейку, нажать CTRL+C, а потом выделить другую и нажать CTRL+V, то размер шрифта тоже копируется.
Если  че, лист защищается строкой Worksheet.Protect Password:="***", UserInterfaceOnly:=True
 
Вы ячейки то позащищайте от копирования, защита работает только для защищаемых ячеек, а для остальных нет
 
Не, но мне нужно, чтобы пользователь мог вводить данные в них, но не менять форматирование!
 
но это тогда не защита. нужно, видимо, сделать макрос который "причесывает" форматы после изменения (введения путем копирования) ячеек по шаблону
 
Попробуйте так. Макрос вставить в код листа, сейчас он рассчитан на диапазон B1:D5
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim aVal
If Intersect(Target, Range("B1:D5")) Is Nothing Then Exit Sub
With Target
    If .Count > 1 Then Exit Sub
    aVal = .Value
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
        .Undo
        Target.Value = aVal
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End With
End Sub
UPD
Или, если нужно установить конкретный формат, то так
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B1:D5")) Is Nothing Then Exit Sub
With Target
    If .Count > 1 Then Exit Sub
    With .Font
        .Name = "Arial"
        .Size = 12
        .Bold = 0
        .Italic = 0
        .Underline = 0
    End With
End With
End Sub
Изменено: МВТ - 14.09.2015 22:57:49
 
Спасибо! первый вариант, мне подошёл бы больше, но он не хочет у меня работать . Однако при определенных условиях, когда запускается какая-то команда из моего макроса, вылезает ошибка -
Run-time error '1004':
Method 'Undo' of object '_Application' failed
После этого копирование и вправду не меняет формат :) однако, все команды, связанные с Application не работают)
 
JerkRandy, у Вас в коде нет других обработчиков событий?
 
Цитата
МВТ написал:
JerkRandy, у Вас в коде нет других обработчиков событий?
Да, я выяснил это связано с вот этим
Код
Private Sub Workbook_Open()
Worksheets("Лист 1").[C2].Value = File_Name
End Sub

То есть при открытии книги эти два кода видимо как-то конфликтуют и вылезает та ошибка
 
Попробуйте так
Код
Private Sub Workbook_Open()
 With Application
    .EnableEvents = False
    Worksheets("Лист 1").[C2].Value = File_Name
   .EnableEvents = True
End With
End Sub
Изменено: МВТ - 14.09.2015 23:24:35
Страницы: 1
Читают тему
Наверх