có thể tạo Userform vừa khít với các loại màn hình (4 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

NguyenthiH

Thành viên mới đăng ký
Tham gia
11/12/16
Bài viết
965
Được thích
175
Giới tính
Nữ
Chào mọi người!
Em hay tạo Userform để nhập liệu, khi tạo em chỉnh kích thước cho vừa với màn hình 14 Inch của Laptop nhà, nhưng khi mang File đó lên làm ở máy công ty thì mở Form lên lại không vừa với màn hình của máy công ty.
Vậy có code nào chỉnh cho Userform luôn vừa với mọi loại màn hình được không ah!
Em cám ơn mọi người.
 
Bạn xem thử khổng biết có phải ý của bạn vầy không?
 

File đính kèm

Upvote 0
cám ơn Anh Giaiphap, nhưng khi Form hiện che luôn Taskbar Anh ơi.
 
Upvote 0
Được rồi Anh giaiphap ơi, nhưng các TextBox và ListBox trên Form nó không can đối theo Form, nó lệch về bên trái, có code nào làm nó can đối theo Form luôn không Anh?
 
Upvote 0
Được rồi Anh giaiphap ơi, nhưng các TextBox và ListBox trên Form nó không can đối theo Form, nó lệch về bên trái, có code nào làm nó can đối theo Form luôn không Anh?
Bạn muốn thế nào thì đưa file lên đây, chứ giúp bạn xong bạn lại không biết áp dụng vào file của bạn nửa thì mất công quá. Do code dài và nhiều.
 
Upvote 0
Chào mọi người!
Em hay tạo Userform để nhập liệu, khi tạo em chỉnh kích thước cho vừa với màn hình 14 Inch của Laptop nhà, nhưng khi mang File đó lên làm ở máy công ty thì mở Form lên lại không vừa với màn hình của máy công ty.
Vậy có code nào chỉnh cho Userform luôn vừa với mọi loại màn hình được không ah!
Em cám ơn mọi người.
Thử vầy xem:
Mã:
Private Sub UserForm_Initialize()
  Application.WindowState = xlMaximized
  Me.Top = 0
  Me.Left = 0
  Me.Height = Application.Height
  Me.Width = Application.Width
End Sub
Hên xui
 
Upvote 0
Được rồi Anh giaiphap ơi, nhưng các TextBox và ListBox trên Form nó không can đối theo Form, nó lệch về bên trái, có code nào làm nó can đối theo Form luôn không Anh?

Thì thử code này:

Mã:
Private Sub UserForm_Initialize()
With Application
  .WindowState = xlMaximized
  Zoom = Int(.Width / Me.Width * 100)
  Width = .Width
  Height = .Height
   End With
End Sub

Tùy theo loại màn hình mà độ phân giải có khác nhau, vì vậy có thể thay đổi số 100 thành 90 hoặc 85, nó tự thay đổi các Control trên Form cho phù hợp.
 
Upvote 0
Được rồi Anh giaiphap ơi, nhưng các TextBox và ListBox trên Form nó không can đối theo Form, nó lệch về bên trái, có code nào làm nó can đối theo Form luôn không Anh?
Cái vụ "cân đối" này hơi khó nha! Thử kiểu này xem:
Mã:
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
    (ByVal hWnd As LongPtr, ByVal nIndex As Long) As Long
Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
    (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_SIZEBOX = &H40000

Dim hWnd As Long, uStyle As Long, OldWidth As Double
Private Sub UserForm_Initialize()
  OldWidth = Me.Width
  hWnd = FindWindow("ThunderDFrame", Me.Caption)
  uStyle = GetWindowLong(hWnd, GWL_STYLE)
  SetWindowLong hWnd, GWL_STYLE, uStyle + WS_SIZEBOX + WS_MINIMIZEBOX + WS_MAXIMIZEBOX
  With Application
    .WindowState = xlMaximized
    Me.Left = .Left: Me.Top = .Top
    Me.Width = .Width: Me.Height = .Height
  End With
End Sub
Private Sub UserForm_Terminate()
  SetWindowLong hWnd, GWL_STYLE, uStyle
End Sub
Private Sub UserForm_Resize()
  Dim lW As Long
  lW = Round(Width / OldWidth * 100, 0)
  If lW > 400 Then lW = 400
  Zoom = lW
End Sub
 
Upvote 0
Em cám ơn Anh Giaiphap, Thầy Ndu, Anh Be09.
Em lấy code của anh Be09 thì ListBox1 bị mất phần dưới, mong các Anh và Thầy Ndu xem giúp.
Em xin gửi file đính kèm.
 

File đính kèm

Upvote 0
Em đưa File lên thì mới thấy code mới của Thầy Ndu, để em thử code của Thầy.
 
Upvote 0
Code mới của Thầy Ndu cũng bị mất phần dưới của ListBox, nhưng có cái hay là có nút Minimize, Maximize.
Mong Thầy Ndu xem giúp.
 
Upvote 0
Code mới của Thầy Ndu cũng bị mất phần dưới của ListBox
Đó là do bạn thiết kế không cân đối chứ không phải tại code
Đã gọi là "cân đối" thì phải làm đều hết tất cả các đối tượng bạn à
Tóm lại: Bạn tự mình thiết kế lại, đến khi nào thấy "vừa khít" thì thôi
nhưng có cái hay là có nút Minimize, Maximize.
.
Vì Zoom lên Maximun, hổng có 2 nút đó thì lấy gì phục hồi nguyên trạng, đúng không?
 
Upvote 0
Tức phải giảm chiều cao của ListBox hả Thầy Ndu???
 
Upvote 0
Tức phải giảm chiều cao của ListBox hả Thầy Ndu???
Thì cứ làm "tùm lum" đi, hồi tự dưng nó.. trúng thôi
Nói đơn giản thì: Bạn cứ tưởng tượng đang thiết kế 1 cái form to bằng màn hình, vậy bạn cứ làm cho mọi controls trở nên cân đối theo kích thước to to ấy đi (giảm chỗ này, tăng chỗ kia... đến khi vừa ý thì thôi)
 
Upvote 0
nãy giờ em cứ giảm chiều cao của ListBox rồi giảm chiều cao của Form rồi cũng được rồi Thầy Ndu ơi, nhưng cứ làm "tùm lum" như vậy "Mỏi tay lắm" và "Không Chuyên".
Vậy Thầy có cách nào cho nhanh giúp em với.
Em xin đưa File Thầy xem giúp.
 

File đính kèm

Upvote 0
nãy giờ em cứ giảm chiều cao của ListBox rồi giảm chiều cao của Form rồi cũng được rồi Thầy Ndu ơi, nhưng cứ làm "tùm lum" như vậy "Mỏi tay lắm" và "Không Chuyên".
Vậy Thầy có cách nào cho nhanh giúp em với.
Em xin đưa File Thầy xem giúp.
Thế em làm mỏi tay chắc thầy Ndu làm không mỏi tay à.
 
Upvote 0
Ý em là phải có cách nào để lập trình cho nó "Cân Đối", chứ đâu phải làm bằng tay (thủ công) kéo vào kéo ra cho vừa.
 
Upvote 0
Ý em là phải có cách nào để lập trình cho nó "Cân Đối", chứ đâu phải làm bằng tay (thủ công) kéo vào kéo ra cho vừa.
Hiệu chỉnh lần cuối:
Mã:
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
    (ByVal hWnd As LongPtr, ByVal nIndex As Long) As Long
Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
    (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare PtrSafe Function ShowWindow Lib "user32" _
    (ByVal hWnd As LongPtr, ByVal nCmdShow As Long) As Long


Private Const GWL_STYLE = (-16)
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const SW_MAXIMIZE = 3
Private Const WS_SIZEBOX = &H40000

Dim hWnd As LongPtr, uStyle As Long, OldWidth As Double, OldHeight As Double
Private Sub UserForm_Initialize()
  OldWidth = Me.Width: OldHeight = Me.Height
  hWnd = FindWindow("ThunderDFrame", Me.Caption)
  uStyle = GetWindowLong(hWnd, GWL_STYLE)
  SetWindowLong hWnd, GWL_STYLE, uStyle + WS_SIZEBOX + WS_MINIMIZEBOX + WS_MAXIMIZEBOX
End Sub
Private Sub UserForm_Activate()
  ShowWindow hWnd, SW_MAXIMIZE
End Sub
Private Sub UserForm_Terminate()
  SetWindowLong hWnd, GWL_STYLE, uStyle
End Sub
Private Sub UserForm_Resize()
  Dim lW As Long, lH As Long, lngZoom As Long
  lW = Round(Me.Width / OldWidth * 100, 0)
  lH = Round(Me.Height / OldHeight * 100, 0)
  lngZoom = IIf(lW > lH, lH, lW)
  If lngZoom > 400 Then lngZoom = 400
  If lngZoom < 10 Then lngZoom = 10
  Zoom = lngZoom
End Sub
Nếu không được nữa thì tôi.. thua
Được cái này sẽ mất cái kia. Mình thiết kế không cân xứng mà cứ bắt code nó phải chỉnh lại cho "cân" thì đúng là chuyện không thể nào. Mọi thứ chỉ có thể ở mức tương đối mà thôi
----------------------------------------------
Ah... mình mới phát hiện có sai sót. Hồi nảy có chỗ minh ghi Application.WidthApplication.Height là sai hoàn toàn. Vừa mới sửa lại thành Me.WidthMe.Height
Các bạn lưu ý chỗ này nhé! Với code cũ sau khi zoom toàn màn hình xong rồi phục hồi trở lại thì các controls sẽ không tự resize tương ứng
 
Lần chỉnh sửa cuối:
Upvote 0
Em đưa File lên thì mới thấy code mới của Thầy Ndu, để em thử code của Thầy.
Ý em là phải có cách nào để lập trình cho nó "Cân Đối", chứ đâu phải làm bằng tay (thủ công) kéo vào kéo ra cho vừa.
Code cũng có thể làm được cái bạn nêu, nhưng học hành bài bản thì mới nên nghĩ đến chuyện này (thuộc dạng chuyên nghiệp).
Còn tay ngang học mò trong Help và trên diễn đàn này, làm được cái Form để sử dụng tạm được thì đã là điều đáng mừng rồi, chứ đừng nghĩ đến những cái cao siêu quá như vậy (chỉ làm đẹp thôi không có hiệu quả gì hết).
 
Upvote 0
Web KT

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

Back
Top Bottom