"Trang điểm" cho User Form

Liên hệ QC
Nguyên văn bởi nvson
Private Sub UserForm_Resize()
Application.ScreenUpdating = False
If Me.Height <= H2 Then
Application.Windows(ThisWorkbook.Name).WindowState = xlMinimized
Else
Application.Windows(ThisWorkbook.Name).WindowState = xlNormal
End If
Application.ScreenUpdating = True
End Sub
Cảm ơn ĐVC đã giải quyết được hoàn toàn vấn để.
Mình chỉ hỏi thêm: Vì sao trong code trên, ta dùng lệnh minimize cái Application (Application.WindowState = xlMinimized), lệnh không được thực hiện?
 
Dear voda,
----------
Em chưa rõ nguyên nhân nhưng em thử kiểm tra trên một Workbook mới thì thấy Application.WindowState = xlMinimized hoạt động bình thường. Có thể nào WindowState bị ảnh hưởng bởi Sub MaxMin() chăng?!$@!!
 
Lần chỉnh sửa cuối:
Menu trên form trong VBA

Menu trên form trong VBA.
Đối với một số người dùng đã qua lập trình Visual Basic thì họ sẽ cảm thấy Form trong VBA thật là chán.
Làm thế nào để Form trong VBA không chán?
Các bạn hãy thử xem đọan code sau:
Mã:
Option Explicit
Private Declare Function FindWindow Lib "user32.dll" _
     Alias "FindWindowA" (ByVal lpClassName As String, _
     ByVal lpWindowName As String) As Long
Private Declare Function CreateMenu Lib "user32" () As Long
Private Declare Function CreatePopupMenu Lib "user32" () As Long
Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" _
     (ByVal hMenu As Long, ByVal wFlags As Long, _
     ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Private Declare Function SetMenu Lib "user32.dll" (ByVal hwnd As Long, _
     ByVal hMenu As Long) As Long
Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long

Private Declare Function CallWindowProc Lib "user32.dll" Alias _
     "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
     ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, _
     ByVal lParam As Long) As Long
Private Const MF_STRING = &H0&
Private Const MF_POPUP As Long = &H10&
Private Const GWL_WNDPROC = -4
Private hMenu As Long, hForm As Long, rv As Long
Private hPopUpMenu As Long
Public Function WindowProc(ByVal hwnd As Long, ByVal iMsg As Long, _
          ByVal wParam As Long, ByVal lParam As Long) As Long
    'Process message of interest here
    'Call original window procedure
End Function
Private Sub UserForm_Activate()

    hForm = FindWindow("ThunderDFrame", "TestMenu")
    Debug.Print hForm
    hMenu = CreateMenu()
    Debug.Print hMenu
    hPopUpMenu = CreatePopupMenu()
    rv = AppendMenu(hPopUpMenu, MF_STRING, 40000, "Menu Item 1")
    Debug.Print rv
    rv = AppendMenu(hPopUpMenu, MF_STRING, 40001, "Menu Item 2")
    Debug.Print rv
    rv = AppendMenu(hMenu, MF_POPUP, hPopUpMenu, "Top-Level")
    rv = SetMenu(hForm, hMenu)
'    hprevwndproc = SetWindowLong(hForm, GWL_WNDPROC, AddressOf WindowProc)
'
'Debug.Print hprevwndproc
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
DestroyMenu hPopUpMenu
DestroyMenu hMenu

End Sub
Các bạn mở file đính kèm ở chế độ Enable, sau đó click vào nút SHOW thử xem.

Tôi sẽ giới thiệu với các bạn về các kỹ thuật trong vài bài tới.

Lê Thanh Nhân
 

File đính kèm

  • TestMenu.xls
    34.5 KB · Đọc: 590
Chỉnh sửa lần cuối bởi điều hành viên:
Chào các bạn,
Và đây là ví dụ việc sử dụng class module trên.
Rất cụ thể, các bạn có thể áp dụng.

Lê Văn Duyệt
 

File đính kèm

  • FormFun.rar
    24.9 KB · Đọc: 786
levanduyet đã viết:
Chào các bạn,
Và đây là ví dụ việc sử dụng class module trên.
Rất cụ thể, các bạn có thể áp dụng.

Lê Văn Duyệt

Cái này hay tuyệt cú mèo, thanks Bác Duyệt nghen.
 
lethanhnhan đã viết:
Menu trên form trong VBA.
Đối với một số người dùng đã qua lập trình Visual Basic thì họ sẽ cảm thấy Form trong VBA thật là chán.
Làm thế nào để Form trong VBA không chán?
Các bạn mở file đính kèm ở chế độ Enable, sau đó click vào nút SHOW thử xem.

Tôi sẽ giới thiệu với các bạn về các kỹ thuật trong vài bài tới.

Lê Thanh Nhân

sau vào top-leve chọn menuIte1,2 thì đâu thấy có gì đâu bạn sau làm sau tạo các nút lệnh vào các menuIten1,2 đó!
 
Chào cả gia đình GPE.
em thấy chủ đề này rất hay. Em không thấy vì chưa shearch. em muốn có 1 chủ đề chuyên về thiết kế các mẫu "Trang điểm" cho User Form ai có mẫu nào thì đưa lên mọi người tham khảo để làm đẹp thêm bản trình bày của mình đồng thời hoàn thiện thêm kiến thức về VBA. Rất mong ban quản trị và anh chị trên GPE ủng hộ.
Thân.
 
Chào cả gia đình GPE.
em thấy chủ đề này rất hay. Em không thấy vì chưa shearch. em muốn có 1 chủ đề chuyên về thiết kế các mẫu "Trang điểm" cho User Form ai có mẫu nào thì đưa lên mọi người tham khảo để làm đẹp thêm bản trình bày của mình đồng thời hoàn thiện thêm kiến thức về VBA. Rất mong ban quản trị và anh chị trên GPE ủng hộ.
Thân.
Bạn xem tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=24123
Code đã được giản lược ở mức dể hiểu nhất để ai cũng có thể làm được
 
Các bạn tạo nút SHOW thế nào vậy, mình không tạo được nút như thế. và cả xoá nó đi như thế nào nữa
 
Mình muốn thay đổi hình dạng của các nút nhấn trong userform cho đẹp. Hiện nay hình như có nhiều chưong trình trợ giúp cho vb làm điều này. Nhưng mình không biết nếu làm trong vb thì có đem qua xài cho vba được không?
 
Lỗi

Cái này có làm được trên bản Portable MS Office 2003 không vậy ? Mình chưa rõ lắm, áp dụng lần đầu nó chạy được, nhưng lần sau nó thông báo !


Nhờ Diễn đàn GPE mình đã tạo được các nút lệnh minimize, restore, close trên form, mình đặt form này làm giao diện chính của chương trình. Nhưng hiện mình chỉ có thể thực hiện được việc min form này mà thôi còn cái file excel sở hữu cái form làm giao diện chính thì vẫn cứ trơ ra đó không chịu “lui” giùm, bộ mặt đẹp đẽ ẩn đi rồi mà ruột rà vẫn cứ phơi ra kỳ quá (lúc này sheet hiện trên màn hình không thể can thiệp được). Mình muốn rằng khi min form thì đồng thời cũng min giùm cái file excel chủ luôn và ngược lại max form lên thì cũng max luôn cái file excel giúp.
Mong các cao nhân xắn tay áo giúp giùm, thành thật cảm ơn.
Nhân đây mình đưa ra cách thức mà bạn nvson đã giúp đỡ tôi tạo cái form này:

Vào VBA, Insert Module rồi thêm đoạn Code sau:


Code:
Option Explicit
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex 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 Const GWL_STYLE As Long = (-16)
Public Const WS_MAXIMIZEBOX As Long = &H10000
Public Const WS_MINIMIZEBOX = &H20000
Public Sub MinMax(sCaption As String)
Dim hWndForm As Long
Dim iStyle As Long
If Val(Application.Version) < 9 Then
hWndForm = FindWindow("ThunderXFrame", sCaption) 'XL97
Else
hWndForm = FindWindow("ThunderDFrame", sCaption) 'XL2000
End If
iStyle = GetWindowLong(hWndForm, GWL_STYLE)
iStyle = iStyle Or WS_MAXIMIZEBOX
iStyle = iStyle Or WS_MINIMIZEBOX
SetWindowLong hWndForm, GWL_STYLE, iStyle
End Sub

Public Sub Example()
UserForm1.Show vbModal
End Sub


Tiếp tục Insert UserForm, nhấn phải chuột vào Form chọn View code, rồi thêm đoạn code sau cho UserForm


Code:

Private Sub UserForm_Initialize()
Call MinMax(UserForm1.Caption)
End Sub

Đây là file tham khảo nhờ cả nhà giúp giùm!+-+-+-+
 

File đính kèm

  • Bao loi.doc
    89 KB · Đọc: 34
dear bạn lethanhnhan,

bạn có thể cho tớ link mấy bài giới thiệu của bạn về kỹ thuật làm giao diện form được ko? minh đang rất quan tâm đến những kỹ thuật này. mà tìm mãi không thấy đâu trên diễn đàn cả . tks nhiều!
 
Web KT
Back
Top Bottom