Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2013, 03:32   #1
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию Скрыть кнопки вставки

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

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

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

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

Какая нужна помощь:
1) Подсказать, как можно с корнем выпилить данные пункт меню и кнопку.
2) Если п.1 невыполним, то привести способы, позволяющие делать вставку только по значению и никак иначе.
m9yt вне форума Ответить с цитированием
Старый 18.11.2013, 04:39   #2
AndVGri
Форумчанин
 
Регистрация: 10.02.2012
Сообщений: 109
По умолчанию

Попробуйте с использованием
Application.CommandBars.FindControl (Type:=msoControlButton,Id:=18)
Хотя часть Id пересекается, список control для 2010 во вложении
Вложения
Тип файла: zip ExcelCtls.zip (115.6 Кб, 14 просмотров)
AndVGri вне форума Ответить с цитированием
Старый 18.11.2013, 07:30   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А что Вам мешает искать нужный ID, в зависимости от Application.Version?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.11.2013, 11:14   #4
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

Цитата:
Сообщение от m9yt Посмотреть сообщение
Для чего это нужно: ограничить пользователя, чтобы он не смог, скопировав откуда-либо диапазон данных, запороть форматирование ячеек (нужна просто вставка по значению).
вставляет хоть что не сбивая форматирование:
Код:
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
maksim_serg вне форума Ответить с цитированием
Старый 18.11.2013, 13:00   #5
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию

Спасибо огромное! Это то, что надо!

Последний раз редактировалось m9yt; 18.11.2013 в 13:40.
m9yt вне форума Ответить с цитированием
Старый 18.11.2013, 13:03   #6
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

тем, что можно изменить содержимое буфера)
вам же нужно только формат не испортить? так зачем весь этот винегрет с блокировкой кнопок и/или созданием кнопок-копий с повешенными на них своими макросами?

и как вы его собрались повесить на комбинацию ctrl+v? это в ворде просто

Последний раз редактировалось maksim_serg; 18.11.2013 в 13:35.
maksim_serg вне форума Ответить с цитированием
Старый 18.11.2013, 13:55   #7
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию

Цитата:
Сообщение от maksim_serg Посмотреть сообщение
тем, что можно изменить содержимое буфера)
вам же нужно только формат не испортить? так зачем весь этот винегрет с блокировкой кнопок и/или созданием кнопок-копий с повешенными на них своими макросами?
Я вначале не обратил внимания, что буфер после копирования как раз того содержания, что мне и нужно.

Цитата:
Сообщение от maksim_serg Посмотреть сообщение
и как вы его собрались повесить на комбинацию ctrl+v? это в ворде просто
Так как обычно:
Код:
Private Sub Workbook_Open()
    Application.OnKey "^v", "ЭтаКнига.Paste"
End Sub

Sub Paste()
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub
Но основной минус решения - можно после копирования вставить с форматированием.
В вашем решении все как надо.
m9yt вне форума Ответить с цитированием
Старый 18.11.2013, 18:39   #8
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

Код:
Private Sub Workbook_Open()
    Application.OnKey "^v", "ЭтаКнига.Paste"
End Sub

Sub Paste()
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub
Это работает только если вставлять с помощью комбинации клавиш CTRL+V. Я вот , например, пользуюсь кнопкой на вкладке. С ней такой фокус не пройдет
maksim_serg вне форума Ответить с цитированием
Старый 19.11.2013, 15:07   #9
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию

Возвращаюсь к задаче снова.
Как выяснилось, код не работает, если вставлять данные из других источников (потому что условие Application.CutCopyMode ложно). Форматирование слетает. Есть возможность выбора метода специальной вставки.

Метод с навешиванием на ctrl+v макроса "ЭтаКнига.Paste" так же не подходит, т.к. опять же есть возможность выбора метода специальной вставки.

Повторю еще раз, что требуется: вставлять скопированные диапазоны данных из любых источников только по значению, при этом в меню "Специальная вставка" не должно быть выбора иной вставки.
Это возможно?

Последний раз редактировалось m9yt; 19.11.2013 в 15:16.
m9yt вне форума Ответить с цитированием
Старый 19.11.2013, 15:21   #10
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

модеренизировал идею maksim_serg
Код:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
       Dim s As String
       s = ClipboardText()
       Call SetClipboardText(s)
End Sub
Function ClipboardText()
   On Error GoTo ClipboardText_Error
   With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .GetFromClipboard
        ClipboardText = .GetText
    End With

   On Error GoTo 0
   Exit Function
ClipboardText_Error:
    ClipboardText = ""
End Function

Sub SetClipboardText(ByVal txt$)
   With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .SetText txt$
        .PutInClipboard
    End With
End Sub
PS: в 2007 работает,2010 не желает.Это всего лишь идея
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 19.11.2013 в 15:25.
doober вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кнопки социальных закладок + коды для вставки. WordPress плагин. Alexei91 WordPress и другие CMS 1 23.05.2012 16:16
Как скрыть кнопки при запуске на печать? RedRec Microsoft Office Excel 1 09.08.2011 10:54
вставки из ассемблера макс07 Общие вопросы C/C++ 7 13.05.2008 19:19
UCOZ: Кнопки кнопки на изображении ReDuX HTML и CSS 19 25.04.2008 02:39
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35