Hỏi code VBA làm chữ ẩn hiện trên Label trong Form.

Liên hệ QC

thangteo

Thành viên thường trực
Tham gia
8/5/07
Bài viết
393
Được thích
43
Nhờ các thầy và các anh xem chỉ giúp em đoạn code khi nhấn nút NHẤP NHÁY thì chữ (hiện tại trong form nó là số 6) nó ẩn rồi hiện tức là nhấp nháy với ạ, và có thể thay đổi tốc độc nhấp nháy theo khoảng thời gian mà mình có thể thay đổi trong code được ạ.
Thank!
 

File đính kèm

  • NhapNhay.xlsm
    18.6 KB · Đọc: 38
Upvote 0
Ủa form này anh là à, e tưởng của chủ thớt. :) .

Chạy 40 năm em trêu thôi, vì nó phải ở phim viễn tưởng :D. Thường em viết code hay có đoạn reset biến đếm về giá trị ban đầu sau khi đạt ngưỡng nào đó, còn trường hợp này form không chạy liên tục 40 năm thì để đó cũng đc. :D
Em có biết làm đâu ạ. Nhờ các thầy giúp cả đấy chứ.
 
Upvote 0
Vậy thay thế Boolean vào sẽ như thế nào ạ??
Mã:
Public lcount As Boolean
Function TimeProc(ByVal H As Long, ByVal nMSG As Long, ByVal nID As Long, ByVal nTsys As Long)
 
  With UserForm1.Label1
    If lcount Then
      .ForeColor = .BackColor
    Else
      .ForeColor = &HC0&
    End If
    lcount = Not (lcount)
    'UserForm1.Repaint
  End With
End Function
 
Upvote 0
Mã:
Public lcount As Boolean
Function TimeProc(ByVal H As Long, ByVal nMSG As Long, ByVal nID As Long, ByVal nTsys As Long)
 
  With UserForm1.Label1
    If lcount Then
      .ForeColor = .BackColor
    Else
      .ForeColor = &HC0&
    End If
    lcount = Not (lcount)
    'UserForm1.Repaint
  End With
End Function
Dạ vâng, cảm ơn ạ.
 
Upvote 0
Có cách nào để chữ trong Label nó nằm ở giữa trên và dưới không các thầy? Em center nó rồi mà chỉ là giữa trái phải thôi, chứ giữa trên dưới không sao chỉnh được???
 

File đính kèm

  • Untitled.jpg
    Untitled.jpg
    288.6 KB · Đọc: 19
Upvote 0
Có cách nào để chữ trong Label nó nằm ở giữa trên và dưới không các thầy? Em center nó rồi mà chỉ là giữa trái phải thôi, chứ giữa trên dưới không sao chỉnh được???
Tôi thường làm cách này:
- Vẽ Label
- Gõ chữ, chỉnh font size sao cho vừa ý
- Canh giữa theo chiều ngang
- Xong, tôi kéo cạnh dưới của Label, cân chỉnh chiều cao sao cho ta cảm giác được text nằm giữa theo chiều dọc thì thôi
Hoặc bạn cũng có thể chơi "ăn gian" bằng cách vẽ 2 Label lồng nhau, canh cái bên trong nằm giữa cái bên ngoài
 
Upvote 0
Tôi thường làm cách này:
- Vẽ Label
- Gõ chữ, chỉnh font size sao cho vừa ý
- Canh giữa theo chiều ngang
- Xong, tôi kéo cạnh dưới của Label, cân chỉnh chiều cao sao cho ta cảm giác được text nằm giữa theo chiều dọc thì thôi
Hoặc bạn cũng có thể chơi "ăn gian" bằng cách vẽ 2 Label lồng nhau, canh cái bên trong nằm giữa cái bên ngoài
Ba cái đơn giản vậy mà cũng hỏi, anh không thích cách nói chuyện nên không trả lời.
 
Upvote 0
Tôi thường làm cách này:
- Vẽ Label
- Gõ chữ, chỉnh font size sao cho vừa ý
- Canh giữa theo chiều ngang
- Xong, tôi kéo cạnh dưới của Label, cân chỉnh chiều cao sao cho ta cảm giác được text nằm giữa theo chiều dọc thì thôi
Hoặc bạn cũng có thể chơi "ăn gian" bằng cách vẽ 2 Label lồng nhau, canh cái bên trong nằm giữa cái bên ngoài
Dạ em cảm ơn thầy ạ. Những kiến thức và kinh nghiệm của những người đi trước luôn là những giá trị lớn để thế hệ trẻ học tập, dù nó là chỉ là nhỏ thôi.
 
Upvote 0
Ba cái đơn giản vậy mà cũng hỏi, anh không thích cách nói chuyện nên không trả lời.
Dạ em cảm ơn anh đã góp ý ạ, em không có ý gì cả. Chỉ vì là người không chuyên và bước đầu tiếp cận với Excel nên cũng muốn hỏi để nhờ các anh và các thầy ai có thiện ý thì trả lời và cho giải pháp. Còn anh không muốn trả lời thì đó là quyền của anh không ép buộc được ạ. Biết là không nên ỷ nại hoặc việc gì cũng hỏi, nhưng anh cũng đừng nên đề cập đến việc đơn giản hay không đơn giản, người thông thạo có thể thấy đơn giản nhưng đối với người chưa biết nhiều đó lại là điều khó. Đôi điều cùng anh, có gì anh thông cảm khi "Ba cái đơn giản.." là hỏi.
 
Upvote 0
Góp ý cho vui thôi, chứ mấy cái vụ Form tôi đâu có biết đâu.
 
Upvote 0
Gợi ý bạn thêm cách nữa: Thay Label bằng CommandButton là ăn chắc khỏi chỉnh gì cả text nó cũng nằm giữa
 
Upvote 0
Đưa con trỏ về đầu dòng text và Ctrl + Enter cũng có thể là một giải pháp ạ.
 
Upvote 0
Thì chỗ:
Mã:
If (Second(Now) Mod 2) Then
là thời gian chớp tắt đó. Code thế nghĩa là 1 giây sáng, 1 giây tắt. Muốn tăng 1 giây lên 2 giây thì.. làm sao? Bạn tự suy nghĩ đi chứ
Gợi ý: Ở trên dùng Mod, giờ kết hợp thêm INT nữa là được
---------------------------
Tuy nhiên: code trên thuộc dạng đơn giản, chạy sẽ không "mượt". Trong khi đó tôi biết có thể bạn định dùng code này cho dự án lớn nào đó. Vậy giải pháp tổng thể cho bạn luôn
1> Code trong module1:
Mã:
Private Declare PtrSafe Function SetTimer Lib "user32" _
        (ByVal hWnd As LongPtr, ByVal nIDEvent As LongPtr, _
        ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
Private Declare PtrSafe Function KillTimer Lib "user32" _
        (ByVal hWnd As LongPtr, ByVal nIDEvent As LongPtr) As Long

Public lCount As Long
Function TimeProc(ByVal H As Long, ByVal nMSG As Long, ByVal nID As Long, ByVal nTsys As Long)
  lCount = lCount + 1
  With UserForm1.Label1
    If (lCount Mod 2) Then
      .ForeColor = .BackColor
    Else
      .ForeColor = &HFF00&
    End If
    UserForm1.Repaint
  End With
End Function
Sub StartTimer()
  On Error Resume Next
  StopTimer
  SetTimer Application.hWnd, 1, 500, AddressOf TimeProc
End Sub
Sub StopTimer()
  On Error Resume Next
  KillTimer Application.hWnd, 1
End Sub
2> Code trong UserForm1
Mã:
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
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 GetWindowLong Lib "user32" Alias "GetWindowLongA" _
        (ByVal hWnd As LongPtr, ByVal nIndex As Long) As Long

Private Const GWL_STYLE = (-16)
Private Const WS_SYSMENU As Long = &H80000

Dim hWnd As LongPtr, uStyle As Long, lCount As Long
Private Sub CommandButton1_Click()
  Dim bChk As Boolean
  Dim sStart As String, sStop As String
  sStart = "NH" & ChrW(7844) & "P NHÁY"
  sStop = "NG" & ChrW(7914) & "NG"
  lCount = 0
  bChk = (CommandButton1.Caption = sStart)
  If bChk Then StartTimer Else: StopTimer
  CommandButton1.Caption = IIf(bChk, sStop, sStart)
End Sub
Private Sub UserForm_Initialize()
  hWnd = FindWindow("ThunderDFrame", Me.Caption)
  uStyle = GetWindowLong(hWnd, GWL_STYLE)
  SetWindowLong hWnd, GWL_STYLE, uStyle And Not WS_SYSMENU
End Sub
Private Sub UserForm_Terminate()
  StopTimer
End Sub
Ở đây bạn chỉ cần chú ý Sub StartTimer
Mã:
Sub StartTimer()
  On Error Resume Next
  StopTimer
  SetTimer Application.hWnd, 1, 500, AddressOf TimeProc
End Sub
Con số 500 là thời gian. Tăng số này lên nghĩa là giảm tốc độ chớp tắt và ngược lại
Làm sơ qua, bạn test lại giúp nhé!
Em chạy 2 file này trên win 64bit và office 64bit thì nhấn vào nút Nhấp nháy Excel khởi động lại ạ. Bị lỗi gì vậy ạ?
 
Upvote 0
Mấy vụ đó liên quan đến 32bit và 64bit ấy
Mò mò trên google từ khóa liên quan đến PtrSafe sẽ có cả đống (diễn đàn mình cũng có)
Ah, nhân tiện mình hỏi thêm:
- Bạn dùng Windows 32 hay 64?
- Bạn dùng Office 32 hay 64?
Hiện tại PC thì em dùng win 32, office 32. Còn Laptop thì win 64 và office 64.
 
Upvote 0
Có cách nào để chữ trong Label nó nằm ở giữa trên và dưới không các thầy? Em center nó rồi mà chỉ là giữa trái phải thôi, chứ giữa trên dưới không sao chỉnh được???
Rảnh rỗi sinh nông nổi, làm chơi cho vui, phải làm vầy không?

A_L.JPG
 
Upvote 0
Có cách nào để chữ trong Label nó nằm ở giữa trên và dưới không các thầy? Em center nó rồi mà chỉ là giữa trái phải thôi, chứ giữa trên dưới không sao chỉnh được???
Có 1 mẹo nhỏ là chèm hình vào label thì chữ có thể canh đều trên-dưới.
(Các bạn thử kiểm tra lại xem nhé)
 

File đính kèm

  • CaptionCenterOfLabel.xlsm
    11.8 KB · Đọc: 51
Upvote 0
Web KT
Back
Top Bottom