2016-10-09 2 views
4

В Excel VBA я пытаюсь ввести «Арабское имя месяца» в переменной, и я нашел способ. Но для моего пути требуется ячейка-буфер, чтобы поместить значения, изменить формат ячейки, получить текстовое значение ячейки и затем поместить это значение в переменную.Как получить имена арабского месяца с помощью 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 & " The Arabic Name of the Month" 
    End Sub 

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

Заранее спасибо.

ответ

3

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

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 & " The Arabic Name of the Month" 
End Sub 

enter image description here

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

Renaud Bompuis

EDIT # 1:

Основываясь на отличное предложение от Axel Richter, это устраняет необходимость хелперов:

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

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

Смежные вопросы