В PERSONAL.XLS в модуле ЭтаКнига пропишите обработку событий: [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Application.OnKey "^q", "SPPASTE_PLUS" 'назначение горячих клавиш End Sub
Private Sub Workbook_Open() On Error Resume Next Application.OnKey "^q" ' сброс горячих клавиш в состояние по умолчанию End Sub
[/vba] Методу OnKey пофигу какая текущая раскладка и регистр. Он обрабатывает именно кнопку. Поэтому макрос, так подвешенный на хоткеи, будет работать и на Q, и на q, и на Й, и на й
ВНИМАНИЕ! В коде допущена опечатка. Исправлено ЗДЕСЬ
В PERSONAL.XLS в модуле ЭтаКнига пропишите обработку событий: [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Application.OnKey "^q", "SPPASTE_PLUS" 'назначение горячих клавиш End Sub
Private Sub Workbook_Open() On Error Resume Next Application.OnKey "^q" ' сброс горячих клавиш в состояние по умолчанию End Sub
[/vba] Методу OnKey пофигу какая текущая раскладка и регистр. Он обрабатывает именно кнопку. Поэтому макрос, так подвешенный на хоткеи, будет работать и на Q, и на q, и на Й, и на й
ВНИМАНИЕ! В коде допущена опечатка. Исправлено ЗДЕСЬAlex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Четверг, 21.02.2013, 16:59
Странно, не работает подмена горячих клавиш. Вот содержимое книги макросов (на кракозябры не обращайте внимания, реально там русские буквы):
[vba]
Код
Sub Вставка_значений() ' Ñî÷åòàíèå êëàâèø: Ctrl+q On Error Resume Next Selection.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:="Òåêñò", Link:=False, DisplayAsIcon:=False If Err Then MsgBox "Îøèáêà " & Err.Number & vbCrLf & Err.Description & vbCrLf End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Application.OnKey "^q", "SPPASTE_PLUS" 'íàçíà÷åíèå ãîðÿ÷èõ êëàâèø End Sub
Private Sub Workbook_Open() On Error Resume Next Application.OnKey "^q" ' ñáðîñ ãîðÿ÷èõ êëàâèø â ñîñòîÿíèå ïî óìîë÷àíèþ End Sub
[/vba]
Странно, не работает подмена горячих клавиш. Вот содержимое книги макросов (на кракозябры не обращайте внимания, реально там русские буквы):
[vba]
Код
Sub Вставка_значений() ' Ñî÷åòàíèå êëàâèø: Ctrl+q On Error Resume Next Selection.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:="Òåêñò", Link:=False, DisplayAsIcon:=False If Err Then MsgBox "Îøèáêà " & Err.Number & vbCrLf & Err.Description & vbCrLf End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Application.OnKey "^q", "SPPASTE_PLUS" 'íàçíà÷åíèå ãîðÿ÷èõ êëàâèø End Sub
Private Sub Workbook_Open() On Error Resume Next Application.OnKey "^q" ' ñáðîñ ãîðÿ÷èõ êëàâèø â ñîñòîÿíèå ïî óìîë÷àíèþ End Sub
Ну, блин... Ну описАлся Я в своём примере при открытии книги сбрасываю хоткеи, а при закрытии - задаю Неужели так трудно было самому очепятку заметить и исправить? Тем более, что я даже комментарии написал Ну, если Вам трудно самому исправить, то я сделаю:[vba]
Код
Private Sub Workbook_Open() On Error Resume Next Application.OnKey "^q", "SPPASTE_PLUS" 'назначение горячих клавиш End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Application.OnKey "^q" ' сброс горячих клавиш в состояние по умолчанию End Sub
[/vba]
Ну, блин... Ну описАлся Я в своём примере при открытии книги сбрасываю хоткеи, а при закрытии - задаю Неужели так трудно было самому очепятку заметить и исправить? Тем более, что я даже комментарии написал Ну, если Вам трудно самому исправить, то я сделаю:[vba]
Код
Private Sub Workbook_Open() On Error Resume Next Application.OnKey "^q", "SPPASTE_PLUS" 'назначение горячих клавиш End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Application.OnKey "^q" ' сброс горячих клавиш в состояние по умолчанию End Sub
borus, Вас, что, ещё за одно и макросы к кнопкам прицеплять поучить ? А может быть за одно и курс обучения VBA провести? Да тут и без знания основ VBA достаточно знания русского языка чтобы прочесть комментарии и английского в пределах младших классов школы (а есть в конце-концов и интернет-переводчики, для тех, кто совсем его не знает), чтобы понять, что Workbook_Open - процедура обработки события, возникающего при открытии рабочей книги, а Workbook_BeforeClose - перед её закрытием.
borus, Вас, что, ещё за одно и макросы к кнопкам прицеплять поучить ? А может быть за одно и курс обучения VBA провести? Да тут и без знания основ VBA достаточно знания русского языка чтобы прочесть комментарии и английского в пределах младших классов школы (а есть в конце-концов и интернет-переводчики, для тех, кто совсем его не знает), чтобы понять, что Workbook_Open - процедура обработки события, возникающего при открытии рабочей книги, а Workbook_BeforeClose - перед её закрытием.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Пятница, 22.02.2013, 10:08
Sub SPPASTE_PLUS() ' "Специальная вставка" On Error Resume Next Selection.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:="Текст", Link:=False, DisplayAsIcon:=False If Err Then MsgBox "Ошибка " & Err.Number & vbCrLf & Err.Description End Sub
очень классная штука. Мне как раз сейчас такая нужна. Делать вставку / замену, таблицы на защищенный листе, через кнопку на листе.
Только вот на чем я споткнулся. Перед вставкой я чищу область [vba]
Код
Range(Cells(1, 1), Cells(NumRow, NumCol)).ClearContents Cells(1, 1).Select On Error Resume Next Selection.PasteSpecial Paste:=xlValues ' вставляем как значение If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:="Текст", Link:=False, DisplayAsIcon:=False If Err Then MsgBox "Ошибка: " & Err.Number & vbCrLf & Err.Description
[/vba]
В результате буфер обмена похоже тоже чистится и тогда макрос ругается. А мне бы хотелось почистить область и сразу осуществить вставку. Возможно ли это как-то реализовать?
Sub SPPASTE_PLUS() ' "Специальная вставка" On Error Resume Next Selection.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:="Текст", Link:=False, DisplayAsIcon:=False If Err Then MsgBox "Ошибка " & Err.Number & vbCrLf & Err.Description End Sub
очень классная штука. Мне как раз сейчас такая нужна. Делать вставку / замену, таблицы на защищенный листе, через кнопку на листе.
Только вот на чем я споткнулся. Перед вставкой я чищу область [vba]
Код
Range(Cells(1, 1), Cells(NumRow, NumCol)).ClearContents Cells(1, 1).Select On Error Resume Next Selection.PasteSpecial Paste:=xlValues ' вставляем как значение If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:="Текст", Link:=False, DisplayAsIcon:=False If Err Then MsgBox "Ошибка: " & Err.Number & vbCrLf & Err.Description
[/vba]
В результате буфер обмена похоже тоже чистится и тогда макрос ругается. А мне бы хотелось почистить область и сразу осуществить вставку. Возможно ли это как-то реализовать?lopuxi
О_о ...и так можно было?
Сообщение отредактировал lopuxi - Среда, 10.02.2016, 11:51
При очистке диапазона буфер обмена чистится всегда. Этого не избежать. Единственное, что могу на вскидку посоветовать - это перед очисткой сначала сохранять где-нибудь содержимое буфера (например, на листе книги Personal.xls, а то чего он без дела болтается ), а потом после очистки диапазона на текущем листе опять копировать из этого скрытого листа и спец-пастить куда нужно.
При очистке диапазона буфер обмена чистится всегда. Этого не избежать. Единственное, что могу на вскидку посоветовать - это перед очисткой сначала сохранять где-нибудь содержимое буфера (например, на листе книги Personal.xls, а то чего он без дела болтается ), а потом после очистки диапазона на текущем листе опять копировать из этого скрытого листа и спец-пастить куда нужно.Alex_ST