Перевод в сообщении [закрыто]

Вопрос или проблема

Перевод Excel в диалоговом окне.
Я могу назначить сочетания клавиш или добавить VBA в пользовательское меню, после нажатия на любое выделение (это будет только одна ячейка, а не несколько ячеек) перевод появится в диалоговом окне.
На котором я могу нажать ЗАКРЫТЬ или ОК

Свойство Validation.InputMessageсвойство Validation.InputTitle) имеет фиксированную строку и не принимает формулу.

Тем не менее, если у вас есть список или массив ячеек валидации и вариантов перевода, то вы можете использовать VBA, чтобы перебрать их при открытии книги (например, событие Workbook_Open()), чтобы изменить Validation.InputMessage на текущий язык пользователя.

(Вы можете использовать <Range>.SpecialCells(xlCellTypeAllValidation) для получения ячеек в диапазоне, которые имеют валидацию, такие как ActiveSheet.UsedRange.SpecialCells(xlCellTypeAllValidation), чтобы получить все ячейки в ActiveSheet, которые содержат валидацию)

Private Sub Workbook_Open()
    Dim ws As Worksheet, valid As Range, ar As Range, rng As Range
    
    Dim Lang As Long
    Lang = Application.LanguageSettings.LanguageID(msoLanguageIDUI) 'Получить язык интерфейса
    'https://learn.microsoft.com/en-us/office/2016/language/language-identifiers-optionstate-id-values
    
    For Each ws In ThisWorkbook.Worksheets
        On Error Resume Next
        Set valid = ws.UsedRange.SpecialCells(xlCellTypeAllValidation)
        On Error GoTo 0
        If Not (valid Is Nothing) Then
            For Each ar In valid.Areas
                For Each rng In ar.Cells
                    If rng.Validation.ShowInput Then
                        Select Case rng.Validation.InputTitle
                            Case "Err404":
                                Select Case Lang
                                    Case 1033 'Английский
                                        rng.Validation.InputMessage = "Данные не найдены"
                                    Case 1031 'Немецкий
                                        rng.Validation.InputMessage = "Daten Nicht Gefunden"
                                    Case 3082 'Испанский
                                        rng.Validation.InputMessage = "Datos no encontrados"
                                End Select
                            Case "Err418":
                                Select Case Lang
                                    Case 1033 'Английский
                                        rng.Validation.InputMessage = "Я чайник!"
                                    Case 1031 'Немецкий
                                        rng.Validation.InputMessage = "Ich bin eine Teekanne!"
                                    Case 3082 'Испанский
                                        rng.Validation.InputMessage = "Soy una tetera!"
                                End Select
                        End Select
                    End If
                Next rng, ar
            End If
        End If
    Next ws
End Sub

Ответ или решение

Перевод в сообщениях диалоговых окон Excel с использованием VBA

Excel предоставляет мощные инструменты для работы с данными, и среди них — возможность добавления пользовательских сообщений через валидацию данных. В данной статье мы рассмотрим, как реализовать функцию перевода текстов в сообщениях диалоговых окон, используя VBA-код. Данная функция может быть полезна, например, при работе с многоязычными пользователями.

Задание задачи

Необходимо создать решение, которое будет отображать переведенные сообщения при выборе одной ячейки с установленной валидацией, через сообщение в диалоговом окне. Пользователь сможет нажать "OK" или "CLOSE" для закрытия окна.

Ограничения

Как указано в документации, свойства Validation.InputMessage и Validation.InputTitle являются фиксированными строками и не поддерживают формулы. Однако есть метод, с помощью которого можно динамически менять эти сообщения на основе языка интерфейса.

Реализация решения

Мы будем использовать событие Workbook_Open() для проверки всех ячеек с валидацией в активной книге и изменения сообщений в зависимости от языка интерфейса Excel.

Вот базовый код для реализации данного решения:

Private Sub Workbook_Open()
    Dim ws As Worksheet, valid As Range, ar As Range, rng As Range
    Dim Lang As Long
    Lang = Application.LanguageSettings.LanguageID(msoLanguageIDUI) ' Получаем язык UI

    For Each ws In ThisWorkbook.Worksheets
        On Error Resume Next
        Set valid = ws.UsedRange.SpecialCells(xlCellTypeAllValidation) ' Находим ячейки с валидацией
        On Error GoTo 0

        If Not (valid Is Nothing) Then
            For Each ar In valid.Areas
                For Each rng In ar.Cells
                    If rng.Validation.ShowInput Then
                        Select Case rng.Validation.InputTitle
                            Case "Err404"
                                Select Case Lang
                                    Case 1033 ' Английский
                                        rng.Validation.InputMessage = "Data Not Found"
                                    Case 1031 ' Немецкий
                                        rng.Validation.InputMessage = "Daten Nicht Gefunden"
                                    Case 3082 ' Испанский
                                        rng.Validation.InputMessage = "Datos no encontrados"
                                End Select
                            Case "Err418"
                                Select Case Lang
                                    Case 1033 ' Английский
                                        rng.Validation.InputMessage = "I'm a teapot!"
                                    Case 1031 ' Немецкий
                                        rng.Validation.InputMessage = "Ich bin eine Teekanne!"
                                    Case 3082 ' Испанский
                                        rng.Validation.InputMessage = "Soy una tetera!"
                                End Select
                        End Select
                    End If
                Next rng
            Next ar
        End If
    Next ws
End Sub

Как это работает

  1. Настройка языка: Мы сначала получаем язык интерфейса пользователя с помощью Application.LanguageSettings.LanguageID(msoLanguageIDUI).

  2. Перебор листов: Для каждого рабочего листа в книге мы ищем ячейки с валидацией данных.

  3. Изменение сообщений: Если ячейка имеет сообщение ввода, то мы проверяем заголовок сообщения. В зависимости от заголовка и языка выбирается соответствующая строка для сообщения.

Заключение

Использование VBA в Excel для динамического изменения сообщений валидации на основе языка интерфейса позволяет значительно улучшить взаимодействие с пользователями, говорящими на разных языках. Надеюсь, данное решение будет полезным для ваших нужд.

Если у вас возникли вопросы или хотите делиться своим опытом, не стесняйтесь оставлять свои комментарии!

Оцените материал
Добавить комментарий

Капча загружается...