Вопрос или проблема
Перевод 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
Как это работает
-
Настройка языка: Мы сначала получаем язык интерфейса пользователя с помощью
Application.LanguageSettings.LanguageID(msoLanguageIDUI)
. -
Перебор листов: Для каждого рабочего листа в книге мы ищем ячейки с валидацией данных.
-
Изменение сообщений: Если ячейка имеет сообщение ввода, то мы проверяем заголовок сообщения. В зависимости от заголовка и языка выбирается соответствующая строка для сообщения.
Заключение
Использование VBA в Excel для динамического изменения сообщений валидации на основе языка интерфейса позволяет значительно улучшить взаимодействие с пользователями, говорящими на разных языках. Надеюсь, данное решение будет полезным для ваших нужд.
Если у вас возникли вопросы или хотите делиться своим опытом, не стесняйтесь оставлять свои комментарии!