Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скрыть кнопки вставки 
V
    Опции темы
m9yt
Дата 18.11.2013, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 27.2.2010

Репутация: нет
Всего: нет



Что нужно: скрыть/удалить/сделать недоступными пункт "Специальная вставка" в контекстном меню и кнопку "Вставить" в панели инструментов (пока речь идет о Excel 2007/2010).

Для чего это нужно: ограничить пользователя, чтобы он не смог, скопировав откуда-либо диапазон данных, запороть форматирование ячеек (нужна просто вставка по значению).

Что для этого делалось (пока только в контекстном меню):
1) Писался макрос, перебирающий все элементы контекстного меню и ищущий совпадение по свойству контрола Caption со значением "&Специальная вставка...". При нахождении контрол удалялся/скрывался/делался недоступным (вариант с поиском по ID отбрасывается, т.к. в разных версиях Excel ID контрола тоже разный).
2) Писался макрос, переопределяющий возможные комбинации кнопок вставки и вставляющий данные из буфера по значению.

Какие недостатки:
1) Для английской версии Excel значение свойства явно не будет таким же.
2) Если просто просмотреть контекстное меню, то нужный мне пункт не отображается. Но, если скопировать какой либо диапазон, то этот пункт чудесным образом возвращается назад.

Какая нужна помощь:
1) Подсказать, как можно с корнем выпилить данные пункт меню и кнопку.
2) Если п.1 невыполним, то привести способы, позволяющие делать вставку только по значению и никак иначе.
PM MAIL   Вверх
m9yt
Дата 18.11.2013, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 27.2.2010

Репутация: нет
Всего: нет



Вставляет хоть что не сбивая форматирование:

Код

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Application.CutCopyMode Then
       Dim s As String
       s = ClipboardText()
       Call SetClipboardText(s)
    End If
End Sub

Function ClipboardText()
   With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .GetFromClipboard
        ClipboardText = .GetText
    End With
End Function

Sub SetClipboardText(ByVal txt$)
   With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .SetText txt$
        .PutInClipboard
    End With
End Sub


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

Это сообщение отредактировал(а) m9yt - 19.11.2013, 14:49
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0384 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.