Как получить арабские названия месяцев с помощью Excel VBA

#vba #excel #arabic #right-to-left

#vba #excel #Арабский #справа налево

Вопрос:

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

Вот мой код VBA:

     Sub GetArabicName()
         Sheets("Sheet1").Cells(1, 1).Value = date() 
         Sheets("Sheet1").Cells(1, 1).NumberFormat = "[$-10A0000]mmmm;@" 
         ArabicMonth = Sheets("Sheet1").Cells(1, 1).Text
         MsgBox ArabicMonth amp; " The Arabic Name of the Month"
    End Sub
  

Есть ли более простой способ сделать это с помощью VBA и без использования буферной ячейки? Кроме того, как я могу заставить MsgBox отображать арабское значение не «?????»

Заранее благодарю вас.

Ответ №1:

Я не могу устранить необходимость во вспомогательной ячейке, но появится окно типа сообщения для отображения текста:

 Public Declare Function MessageBoxU Lib "user32" Alias "MessageBoxW" _
                            (ByVal hwnd As Long, _
                             ByVal lpText As Long, _
                             ByVal lpCaption As Long, _
                             ByVal wType As Long) As Long

Sub GetArabicName()
    Dim ArabicMonth As String
    With Sheets("Sheet1").Cells(1, 1)
         .Value = Date
         .NumberFormat = "[$-10A0000]mmmm;@"
         .Font.Name = "Arial Unicode MS"
         ArabicMonth = .Text
    End With
    MessageBoxU 0, StrPtr(ArabicMonth), StrPtr("MsgBox Substitute"), 0
    MsgBox ArabicMonth amp; " The Arabic Name of the Month"
End Sub
  

введите описание изображения здесь

Адаптировано из:

Рено Бомпюи

РЕДАКТИРОВАТЬ # 1:

Основываясь на превосходном предложении Акселя Рихтера, это устраняет необходимость во вспомогательной ячейке:

 Sub GetArabicNames_II()
    Dim ArabicMonth As String
    ArabicMonth = Application.WorksheetFunction.Text(Date, "[$-10A0000]mmmm;@")
    MessageBoxU 0, StrPtr(ArabicMonth), StrPtr("MsgBox Substitute"), 0
End Sub
  

Комментарии:

1. Использование ArabicMonth = Application.Text(Date, "[$-10A0000]mmmm") буферной ячейки не требуется A1 .