Cài đặt vị trí hiển thị cho MsgBox

  • Thread starter Thread starter hantoa
  • Ngày gửi Ngày gửi
Liên hệ QC

hantoa

Thành viên mới
Tham gia
16/11/11
Bài viết
14
Được thích
3
Xin chào mọi người
Trong Excel khi hộp thoại Msgbox xuất hiện, nó mặc định hiển thị ở trung tâm màn hình.
hiện mình muốn nó hiển thị vào vị trí qui định nào đó theo ý mình thì phải làm thế nào vậy ạ
mong được mọi người giúp đỡ
cảm ơn nhiều!
 
Thao khảo code
PHP:
Option Explicit
Private Declare Function GetSystemMetrics _
Lib "user32" (ByVal nIndex As Long) As Long
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 GetWindowRect Lib "user32" _
(ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function SetWindowPos Lib "user32" ( _
    ByVal hwnd As Long, _
    ByVal hWndInsertAfter As Long, _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal cx As Long, _
    ByVal cy As Long, _
    ByVal wFlags As Long) As Long
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Private Const SM_CXSCREEN = 0
Private Const SM_CYSCREEN = 1
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_NOZORDER = &H4
Private dXpos As Variant
Private dYpos As Variant
Private lTimerID As Long
Private Sub TimerProc()
    Dim uMsgBoxRect As RECT
    Dim dMsgboxWidth As Double
    Dim dMsgboxHeight As Double
    Dim lMsgboxhwnd As Long
    Dim lScreenWidth As Long
    Dim lScreenHeight As Long
   'timer no longer required
    KillTimer 0, lTimerID
    'get the screen dims
    lScreenWidth = GetSystemMetrics(SM_CXSCREEN)
    lScreenHeight = GetSystemMetrics(SM_CYSCREEN)
    'get the msgbox handle
    lMsgboxhwnd = FindWindow("#32770", vbNullString)
    'get the msgbox rect
    GetWindowRect lMsgboxhwnd, uMsgBoxRect
    'get the msgbox width and height
    With uMsgBoxRect
        dMsgboxWidth = (.Right - .Left)
        dMsgboxHeight = (.Bottom - .Top)
    End With
    'if the XPos , YPos are ignored, center the Msgbox
    If IsNull(dXpos) Then dXpos = (lScreenWidth - dMsgboxWidth) / 2
    If IsNull(dYpos) Then dYpos = (lScreenHeight - dMsgboxHeight) / 2
   'ensure Msgbox is never offscreen
    If dXpos + dMsgboxWidth > lScreenWidth Then dXpos = _
    lScreenWidth - dMsgboxWidth
    If dYpos + dMsgboxHeight > lScreenHeight Then dYpos = _
    lScreenHeight - dMsgboxHeight - 50 'takes into account the approx Taskbar height
   
    dXpos = WorksheetFunction.Max(dXpos, 0)
    dYpos = WorksheetFunction.Max(dYpos, 0)
    'postion the msgbox
    SetWindowPos lMsgboxhwnd, 0, dXpos _
    , dYpos, 0, 0, SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOACTIVATE
End Sub
Private Function MsgBoxEx(Prompt As String, Optional Buttons As VbMsgBoxStyle = vbOKOnly, _
 Optional Title As String, Optional HelpFile, _
 Optional Context, Optional XPos, Optional YPos) As VbMsgBoxResult
    If IsMissing(XPos) Then XPos = Null
    If IsMissing(YPos) Then YPos = Null
    'pass the x,y params to a module level var
    dXpos = XPos
    dYpos = YPos
    'start a timer to position the msgbox
    lTimerID = SetTimer(0, 0, 1, AddressOf TimerProc)
    'display the msgbox and gets its return
    MsgBoxEx = MsgBox(Prompt, Buttons, Title, HelpFile, Context)
End Function
Sub Test()
    MsgBoxEx Prompt:="hello from the screen TopLeft!", Buttons:=vbInformation, _
    Title:="Positioning of Msgbox Demo.", XPos:=0, YPos:=0
    MsgBoxEx Prompt:="hello from the screen BottomRight!", Buttons:=vbInformation, _
    Title:="Positioning of Msgbox Demo.", XPos:=100000, YPos:=100000
    MsgBoxEx Prompt:="hello from the screen Center!", Buttons:=vbInformation, _
    Title:="Positioning of Msgbox Demo."
End Sub
 
Xin chào mọi người
Trong Excel khi hộp thoại Msgbox xuất hiện, nó mặc định hiển thị ở trung tâm màn hình.
hiện mình muốn nó hiển thị vào vị trí qui định nào đó theo ý mình thì phải làm thế nào vậy ạ
mong được mọi người giúp đỡ
cảm ơn nhiều!
Có nhiều cách để làm điều này. Trong số đó, cách dùng DialogSheet chính là cách đơn giản nhất. Bạn muốn nó nằm chỗ nào, cứ kéo tới chỗ đó thì lần sau nó sẽ cứ chỗ đó mà xuất hiện, không cần code gì cả
Với DialogSheet, bạn tùy ý hoa lá cành: Chữ đậm, chữ nghiêng, tô màu chữ màu nền thoải mái (làm đến lúc vừa ý mới thôi)
 
Có nhiều cách để làm điều này. Trong số đó, cách dùng DialogSheet chính là cách đơn giản nhất. Bạn muốn nó nằm chỗ nào, cứ kéo tới chỗ đó thì lần sau nó sẽ cứ chỗ đó mà xuất hiện, không cần code gì cả
Với DialogSheet, bạn tùy ý hoa lá cành: Chữ đậm, chữ nghiêng, tô màu chữ màu nền thoải mái (làm đến lúc vừa ý mới thôi)
Chào bác, bác có thể cho em xin Link hướng dẫn cụ thể về DialogSheet này được không ạ
thật sự em rất là Amator về cái này ạ
 
Chào bác, bác có thể cho em xin Link hướng dẫn cụ thể về DialogSheet này được không ạ
thật sự em rất là Amator về cái này ạ
Thì bạn cứ click chuột phải trên sheet tab, chọn Insert. Trong cửa sổ tùy chọn hiện ra, bạn chọn vào MS Excel 5.0 Dialog
Có cái Dialog rồi, cứ tùy ý vẽ vời thôi

Untitled1.jpg

Untitled2.jpg

Untitled3.jpg


Code để show DialogSheet chỉ đơn giản thế này
Mã:
Sub DialogShow()
  Dim dlg As DialogSheet
  Set dlg = DialogSheets("Dialog1")
  dlg.Show
End Sub
Với các nút OK, Cancel trên DialogSheet, bạn hoàn toàn có thể Assign Macro nó với 1 sub nào đó. Ngoài ra thì bạn có thể xóa hoặc vẽ thêm bất kỳ đối tượng nào
 
Thì bạn cứ click chuột phải trên sheet tab, chọn Insert. Trong cửa sổ tùy chọn hiện ra, bạn chọn vào MS Excel 5.0 Dialog
Có cái Dialog rồi, cứ tùy ý vẽ vời thôi

View attachment 190802

View attachment 190803

View attachment 190804


Code để show DialogSheet chỉ đơn giản thế này
Mã:
Sub DialogShow()
  Dim dlg As DialogSheet
  Set dlg = DialogSheets("Dialog1")
  dlg.Show
End Sub
Với các nút OK, Cancel trên DialogSheet, bạn hoàn toàn có thể Assign Macro nó với 1 sub nào đó. Ngoài ra thì bạn có thể xóa hoặc vẽ thêm bất kỳ đối tượng nào
Cảm ơn bác nhiều ạ, cái này thật sự là rất hay mà em chưa biết. thật tuyệt vời!
Chúc U23 Việt Nam ngày mai vô địch!
 
Đây là bài viết mình cần tìm, đã thành công theo thầy và các bác hướng dẫn, cảm ơn mọi người
Chưa chắc là thành công đâu nha!
Tôi nói thế là vì trong bài đó có dùng hàm API, sẽ phải chỉnh sửa lại nhiều mới chạy được trên Office 64 bit. Có nghĩa là: Với code đó, trên máy bạn chạy được chưa chắc máy người khác cũng được
 
Web KT

Bài viết mới nhất

Back
Top Bottom