Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Смена раскладки клавиатуры заполненных ячеек в надстройке - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Смена раскладки клавиатуры заполненных ячеек в надстройке
Kofeeman Дата: Пятница, 03.10.2025, 09:57 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Вопросы по VBA
Тема - Смена раскладки клавиатуры заполненных ячеек в надстройке.
Всем доброго времени суток. ИИ написал мне макрос для смены раскладки клавиатуры уже заполненных ячеек. Сам макрос работает как надо. Но в надстройке отказывается работать. Ошибок никаких не показывает, при нажатии на кнопку ничего не происходит. Смена раскладки нужна в новых файлах Excel, поэтому макрос нужен именно в надстройке.
Сам макрос:
[vba]
Код
Option Explicit

Sub ChangeKeyboardLayout()
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary") ' Лексикон для соответствия символов

    Dim ws As Worksheet
    Dim lastRow As Long
    Dim cell As Range
    Dim inputText As String
    Dim result As String
    Dim i As Long
    Dim ch As String

    Dim russianLower As String
    Dim englishLower As String
    Dim russianUpper As String
    Dim englishUpper As String

    Dim keyChar As String
    Dim valueChar As String

    ' Карта перевода: что набираем на русском клавиатуре -> что будет на английской раскладке
    russianLower = "ёйцукенгшщзхъфывапролджэячсмитьбю."
    englishLower = "`qwertyuiop[]asdfghjkl;'zxcvbnm,./"
    
    russianUpper = "Ё""№;:?ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,"
    englishUpper = "~@#$^&QWERTYUIOP{}ASDFGHJKL:""|ZXCVBNM<>?"

     ' Построение словаря соответствий
    Dim idx As Long
    For idx = 1 To Len(russianLower)
        keyChar = Mid$(russianLower, idx, 1)
        valueChar = Mid$(englishLower, idx, 1)
        If Not dict.Exists(keyChar) Then dict.Add keyChar, valueChar
    Next idx

    For idx = 1 To Len(russianUpper)
        keyChar = Mid$(russianUpper, idx, 1)
        valueChar = Mid$(englishUpper, idx, 1)
        If Not dict.Exists(keyChar) Then dict.Add keyChar, valueChar
    Next idx

    ' Обработка диапазона A1:A последняя заполненная строка на первом листе
    Set ws = ThisWorkbook.Sheets(1)
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For Each cell In ws.Range("A1:A" & lastRow)
        If Not IsEmpty(cell) Then
            inputText = CStr(cell.Value2)
            result = ""

            If inputText <> "" Then
                For i = 1 To Len(inputText)
                    ch = Mid$(inputText, i, 1)
                    If dict.Exists(ch) Then
                        result = result & dict(ch)
                    Else
                        result = result & ch
                    End If
                Next i
            End If

            cell.Value = result
        End If
    Next cell
End Sub
[/vba]

Приложил пример, что макрос работает(но не в надстройке)
На всякий случай файл надстройки также прикладываю.
К сообщению приложен файл: moja_nadstrojka.xlam (20.4 Kb) · test_smena_raskladki.xlsm (21.9 Kb)
 
Ответить
СообщениеВопросы по VBA
Тема - Смена раскладки клавиатуры заполненных ячеек в надстройке.
Всем доброго времени суток. ИИ написал мне макрос для смены раскладки клавиатуры уже заполненных ячеек. Сам макрос работает как надо. Но в надстройке отказывается работать. Ошибок никаких не показывает, при нажатии на кнопку ничего не происходит. Смена раскладки нужна в новых файлах Excel, поэтому макрос нужен именно в надстройке.
Сам макрос:
[vba]
Код
Option Explicit

Sub ChangeKeyboardLayout()
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary") ' Лексикон для соответствия символов

    Dim ws As Worksheet
    Dim lastRow As Long
    Dim cell As Range
    Dim inputText As String
    Dim result As String
    Dim i As Long
    Dim ch As String

    Dim russianLower As String
    Dim englishLower As String
    Dim russianUpper As String
    Dim englishUpper As String

    Dim keyChar As String
    Dim valueChar As String

    ' Карта перевода: что набираем на русском клавиатуре -> что будет на английской раскладке
    russianLower = "ёйцукенгшщзхъфывапролджэячсмитьбю."
    englishLower = "`qwertyuiop[]asdfghjkl;'zxcvbnm,./"
    
    russianUpper = "Ё""№;:?ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,"
    englishUpper = "~@#$^&QWERTYUIOP{}ASDFGHJKL:""|ZXCVBNM<>?"

     ' Построение словаря соответствий
    Dim idx As Long
    For idx = 1 To Len(russianLower)
        keyChar = Mid$(russianLower, idx, 1)
        valueChar = Mid$(englishLower, idx, 1)
        If Not dict.Exists(keyChar) Then dict.Add keyChar, valueChar
    Next idx

    For idx = 1 To Len(russianUpper)
        keyChar = Mid$(russianUpper, idx, 1)
        valueChar = Mid$(englishUpper, idx, 1)
        If Not dict.Exists(keyChar) Then dict.Add keyChar, valueChar
    Next idx

    ' Обработка диапазона A1:A последняя заполненная строка на первом листе
    Set ws = ThisWorkbook.Sheets(1)
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For Each cell In ws.Range("A1:A" & lastRow)
        If Not IsEmpty(cell) Then
            inputText = CStr(cell.Value2)
            result = ""

            If inputText <> "" Then
                For i = 1 To Len(inputText)
                    ch = Mid$(inputText, i, 1)
                    If dict.Exists(ch) Then
                        result = result & dict(ch)
                    Else
                        result = result & ch
                    End If
                Next i
            End If

            cell.Value = result
        End If
    Next cell
End Sub
[/vba]

Приложил пример, что макрос работает(но не в надстройке)
На всякий случай файл надстройки также прикладываю.

Автор - Kofeeman
Дата добавления - 03.10.2025 в 09:57
Pelena Дата: Пятница, 03.10.2025, 10:35 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19571
Репутация: 4646 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте.
Первое, что бросается в глаза - обращение ThisWorkbook. Это обращение к книге, в которой находится макрос, то есть в данном случае к надстройке.
А надо к рабочей книге. Попробуйте заменить на ActiveWorkbook


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Первое, что бросается в глаза - обращение ThisWorkbook. Это обращение к книге, в которой находится макрос, то есть в данном случае к надстройке.
А надо к рабочей книге. Попробуйте заменить на ActiveWorkbook

Автор - Pelena
Дата добавления - 03.10.2025 в 10:35
Kofeeman Дата: Пятница, 03.10.2025, 10:41 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Большое спасибо. Всё заработало hands
 
Ответить
СообщениеБольшое спасибо. Всё заработало hands

Автор - Kofeeman
Дата добавления - 03.10.2025 в 10:41
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!