Страницы: 1
RSS
копирование из редактора VBA русского текста в буфер обмена, попытка использовать sentKey для решения задачи, неудачно
 
Здравствуйте, известна проблема, что чтобы скопировать из редактора VBA русский текст, нужно предварительно переключиться на русскую клавиатуру.

Но это напрягает  - все время отслеживать какая раскладка включена.

Попытался сделать горячую клавишу Шифт+Контрл + С чтобы она запускала макрос, который будет нажимать:
1) комбинацию Контрол + 1 (у меня на компьютере она переключает раскладку на русский язык).
2) посылает команду Cntr+ C которая по идее должна копировать в буфер обмена все что выделено.

Но не получается.

Работает только если запускать из книги Эксель, и копирует в буфер обмена какую-то ерунду. А мне надо из редактора ВБА.

вопросы:
1) что я делаю не так, можно ли так решить проблему
2) какие есть альтернативные решения (искал сам, но не нашел решения)

Код, который загружается при открытии книги:
Код
Sub CreateOnKey()

 'пробую чтобы копировать в буфер обмена только на русской раскладке
  
 Application.OnKey "^+c", "CopyWithRightRusLetters"
  Application.OnKey "^+с", "CopyWithRightRusLetters"
    
    
End Sub

Код при нажатии на контрол+шифт+С:
Код
Sub CopyWithRightRusLetters()
'MsgBox "начало"

SendKeys "^1" 'переклсючение на РУССКИЙ язык
'MsgBox "переключился на русский"

Application.SendKeys "^c" 'копирование текста на русской раскладке
Application.SendKeys "^с" 'копирование текста на русской раскладке
'MsgBox "должен скопироть текст" 'не копирует! должен копировать даже из редактора VBA

'MsgBox "test rus letters to clipboard"

End Sub

'текст на русском языке который должен копироваться прямо в редакторе ВБА
 
Цитата
malefactor написал:
Попытался сделать горячую клавишу
Сначала надо научиться создавать надстройки, которые работают в среде VBE (редактора кода). Заявленная в теме цель, на мой взгляд, не оправдает тех усилий, которые нужно на это потратить.
Альтернатива - перехватить команду Copy меню VBE Edit.
Если все-таки рискнете, то ключевым будет метод GetSelection.
Изменено: sokol92 - 12.06.2021 15:48:01
Владимир
 
Кодовая страница Windows 1252 - ЗЛО! Подмените на Windows 1251.
PS В Win10 не пробовал, лениво, а в Win 7 работало сливочно. И таких крокозябр тоже не было.
 
Цитата
sokol92 написал:
Подмените на Windows 1251
Здравствуйте, Андрей! Ни в коем случае в нашем глобальном мире - иначе хана расширенной латинице и др. неприятности.

Такой код неожиданно работает - перехватывает и корректно обрабатывает команду Edit/Copy редактора VBE, нажатие соответствующей кнопки на инструментальной линейке, а также соответствующий пункт в контекстном меню. Ctrl+C не обрабатывает. Вставить в модуль книги личной книги макроса или надстройки.
Код
Option Explicit
#If VBA7 Then
Private Declare PtrSafe Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As LongPtr, ByVal flags As Long) As LongPtr
#Else
Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
#End If

Dim WithEvents CBar As CommandBarButton

Private Sub Workbook_Open()
   '  иные действия при открытии книги
   Set CBar = Application.VBE.CommandBars("Menu Bar").FindControl(, 19, , , True)
End Sub

Private Sub CBar_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
   ActivateKeyboardLayout 68748313, 0  ' меняем раскладку клавиатуры на Ru
End Sub

Копировал код в редакторе с английской раскладкой. :)  
Изменено: sokol92 - 12.06.2021 16:41:56
Владимир
 
Спасибо. Буду пробовать. Экспериментировать.

Еще немного почитал один учебник по вба и у меня сложилось впечатление, что тут может помочь Windows Api. Надо будет попробовать изучить эту тему.

Код у меня тоже заработал - спасибо, уже лучше, чем ничего. Для мозга в любом случае наверное проще выбрать "копировать" из списка чем постоянно проверять какая раскладка активна :) Так что пока буду пользоваться этим, а там может и Windows Api освою или какое другое решение
Изменено: malefactor - 12.06.2021 17:48:01
 
Код из #4, несомненно, использует Windows API. :)  
Владимир
 
Откопал из форума 2009 года:
Цитата
Для Win7 64-bit помогла замена файла c:\Windows\System32\C_1252.NLS файлом c:\Windows\System32\C_1251.NLS
Тут вроде как не советуют,
Цитата
иначе хана расширенной латинице и др. неприятности.
, но судя по кириллице в скриптах, иметь расширенную латиницу не особо актуально.
 
Цитата
Михаил написал:
иметь расширенную латиницу не особо актуально
Здравствуйте, Михаил! Посмотрите, сколько на форуме вопросов о том, что неправильно открываются файлы, полученные от / подготовленные для "датчан и разных прочих шведов". Если Вы на своем компьютере будете только писать "скрипты на кириллице" (и пользоваться из всех программ исключительно Excel), то можете подменить кодовую страницу.
Владимир
Страницы: 1
Наверх