سلام علیکم
هم میتوانید از ثابت vbMsgBoxRtlReading در MsgBox استفاده کنید:
Call MsgBox("1-سلام", vbMsgBoxRtlReading)
و اگر نمیخواهید فرم برنامه RTL شود از کد زیر استفاده کنید:
کد زیر را در ماژول کد کپی کنید و پس از آن طبق روال معمول تابع MsgBox را احضار کنید:
Option Explicit
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function InvalidateRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT, ByVal bErase As Long) As Long
Public Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function GetClientRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public rClientRect As RECT
Public Const GWL_EXSTYLE = -20
Public Const WS_EX_LAYOUTRTL As Long = &H400000
Private Const MB_LBL_RTL As Long = &H1&
Private sLastTitle$
Public Function MsgBox(sPrompt$, Optional Buttons As VbMsgBoxStyle, Optional sTitle$) As VbMsgBoxResult
sTitle$ = sTitle$ & String(Int(Rnd * 50), Chr(0))
sLastTitle = sTitle$
SetTimer Screen.ActiveForm.hwnd, MB_LBL_RTL, 1, AddressOf TimerProc
MsgBox = VBA.MsgBox(sPrompt, Buttons, sTitle$)
End Function
Private Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
Dim hMessageBox As Long
KillTimer hwnd, idEvent
hMessageBox = FindWindow("#32770", sLastTitle)
Select Case idEvent
Case MB_LBL_RTL
Dim ch_hwnd&, class_nam$, obj_cap$
Do
ch_hwnd& = FindWindowEx(hMessageBox, ch_hwnd&, vbNullString, vbNullString)
class_nam$ = String$(50, Chr(0))
GetClassName ch_hwnd&, class_nam$, Len(class_nam$)
If class_nam$ Like "Static*" Then
SetWindowLong ch_hwnd&, GWL_EXSTYLE, GetWindowLong(ch_hwnd&, GWL_EXSTYLE) Or WS_EX_LAYOUTRTL
GetClientRect hMessageBox, rClientRect
InvalidateRect hMessageBox, rClientRect, True
End If
Loop Until ch_hwnd& = 0
End Select
End Sub
برای مثال:
Call MsgBox("1-سلام")
موفق باشید