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.
Mong Thầy Batman1 làm giúp cho em trên File của em, vì em lấy code của Thầy chuyển sang file của em thì khi nạp dữ lieu vào ListBox vẫn chưa can đối.
Sao bây giờ em gửi File đính kèm không được.
Và hoặc là nhập trong cửa sổ thiết kế Properties hoặc trong Sub UserForm_Initialize trước dòng For Each c In Controls phải thêm code
Mã:
With ListBox1
.ColumnCount = 5
.ColumnWidths = "20;240;110;120;70"
End With
Bạn chịu khó suy nghĩ chút nhé. Suy nghĩ không đau đâu. Nếu trong code có kiểm tra ColumnWidths (If c.ColumnWidths = "" Then) thì ColumnWidths phải nhập trước khi kiểm tra. Phải kiểm tra ColumnWidths vì mặc định thì ListBox, ComboBox chỉ có 1 cột và ColumnWidths = ""
Nhưng trong trường hợp này thì còn một chuyện khác thú vị hơn. Giả sử Form đang max, tức code đã vào cuộc và phóng to ColumnWidths. Bây giờ bạn nhập dữ liệu và khi bạn nhấn Enter ở TextBox cuối cùng thì Sub ghilistbox1 được thực hiện. Mà nó lại chuyển ColumnWidths về mặc định thì rõ ràng là công code phóng to ColumnWidths đổ xuống sông xuống biển rồi còn gì. Các cột co lại là do chính bạn chuyển về mặc định thì sao bạn lại phàn nàn??? Bạn chưa thạo viết code nhưng bạn không thể viện lý do là không biết suy nghĩ.
2. Nhân tiện sửa Sub CalcColWidths thành
Mã:
Private Sub CalcColWidths(ByVal c As MSForms.Control, ByVal zoomX As Double)
Dim k As Long, s As String, cSize
' If c.ColumnCount = 1 Then Exit Sub
s = Replace(c.Tag, " pt", "")
cSize = Split(Left(s, InStrRev(s, ";") - 1), ";")
s = ""
For k = LBound(cSize) To UBound(cSize)
s = s & Int(cSize(k) * zoomX) & " pt;"
Next k
c.ColumnWidths = Left(s, Len(s) - 1)
End Sub
2. Bạn hãy test lần nữa và cho kết quả test để mọi người biết. Lúc đó có thể có người khác giúp bạn - bằng cách khác hoặc làm chuẩn hơn. Riêng tôi không muốn làm nữa.
3. Trong UserForm_Initialize thay
Mã:
For Each c In Controls
If TypeName(c) = "ListBox" Then c.Tag = c.height
Next c
bằng
Mã:
For Each c In Controls
If TypeName(c) = "ListBox" Or TypeName(c) = "ComboBox" Then
If c.ColumnWidths = "" Then
c.Tag = String(c.ColumnCount, "a")
c.Tag = Replace(c.Tag, "a", (c.Width - 13) / c.ColumnCount & " pt;") & c.height
Else
c.Tag = c.ColumnWidths & ";" & c.height
End If
End If
Next c
4. Trong code của UserForm1 thêm code
Mã:
Private Sub CalcColWidths(ByVal c As MSForms.Control, ByVal zoomX As Double)
Dim k As Long, s As String, cSize
If c.ColumnCount = 1 Then Exit Sub
s = Replace(c.Tag, " pt", "")
cSize = Split(Left(s, InStrRev(s, ";") - 1), ";")
For k = LBound(cSize) To UBound(cSize)
cSize(k) = cSize(k) * zoomX
Next k
c.ColumnWidths = Join(cSize, " pt;") & " pt"
End Sub
5. Thay Sub ScaleFormControls bằng sub mới
Mã:
Private Sub ScaleFormControls()
Dim scaleX As Double, scaleY As Double, x As Double, y As Double, cSize, c As MSForms.Control
scaleX = InsideWidth / OldInsideWidth
scaleY = InsideHeight / OldInsideHeight
x = scaleX / lastScaleX
y = scaleY / lastScaleY
For Each c In Controls
c.Left = c.Left * x
c.Top = c.Top * y
c.Width = c.Width * x
If TypeName(c) = "ListBox" Then
cSize = Split(c.Tag, ";")
c.height = cSize(UBound(cSize)) * scaleY
Else
c.height = c.height * y
End If
' goi CalcColWidths sau khi xac dinh Height cua ListBox
If TypeName(c) = "ListBox" Or TypeName(c) = "ComboBox" Then
CalcColWidths c, scaleX
End If
On Error Resume Next
c.Font.Size = c.Font.Size * y
On Error GoTo 0
Next c
lastScaleX = scaleX
lastScaleY = scaleY
End Sub
Bạn ơi liệu VBA có phóng to một trang web được không bạn nhỉ?
Có cách nào để dùng VBA điều chỉnh kích thước cửa số của một ứng dụng khác ( Chorme chẳng hạn ) ?
Bạn ơi liệu VBA có phóng to một trang web được không bạn nhỉ?
Có cách nào để dùng VBA điều chỉnh kích thước cửa số của một ứng dụng khác ( Chorme chẳng hạn ) ?