#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
.