Nhờ anh chị giúp msgbox hiện trong 1s (1 người xem)

Liên hệ QC

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

haikimcuong

Thành viên hoạt động
Tham gia
6/7/10
Bài viết
169
Được thích
36
Em gửi file dưới đây nhờ anh/chị giúp đỡ code msgbox với điều kiện như sau:
Khi đưa vào textbox1 trong userform1 1 số hoặc là 0 hoặc là -1, -2...-n (âm) thì sẽ hiện msgbox thông báo giá trị không hợp lệ.
userform em đã gắp phím Ctrl + q để hiện vì em không hiểu sao đã gắn code showform mà nó vẫn k hiện.
Cảm ơn anh chị.
 

File đính kèm

1/ Bạn muốn hiện thông báo bắt lỗi nhập số <=0 Vào textbox thì gán code vào sự kiện textbox_change thôi
2/ Ctrl + Q vẫn hiện Form bình thường
3/ Tên topic kỳ kỳ quá
4 / Bạn xem file xem có đúng yêu cầu không?
 

File đính kèm

Upvote 0
Em gửi file dưới đây nhờ anh/chị giúp đỡ code msgbox với điều kiện như sau:
Khi đưa vào textbox1 trong userform1 1 số hoặc là 0 hoặc là -1, -2...-n (âm) thì sẽ hiện msgbox thông báo giá trị không hợp lệ.
userform em đã gắp phím Ctrl + q để hiện vì em không hiểu sao đã gắn code showform mà nó vẫn k hiện.
Cảm ơn anh chị.

Sao bạn không chặn các số đó luôn, khi gõ nó không ra được CHỮ, KÝ TỰ ĐẶC BIỆT, CHỈ CHO GÕ ĐƯỢC SỐ VÀ SỐ ĐÓ LỚN HƠN 0? Cần chi phải thông với báo làm chi!
 
Upvote 0
1/ Bạn muốn hiện thông báo bắt lỗi nhập số <=0 Vào textbox thì gán code vào sự kiện textbox_change thôi
2/ Ctrl + Q vẫn hiện Form bình thường
3/ Tên topic kỳ kỳ quá
4 / Bạn xem file xem có đúng yêu cầu không?
Dạ rất đúng ý em nhưng liệu có thể để nó tự tắt trong 2s hoặc 1s không à.
 
Upvote 0
Sao bạn không chặn các số đó luôn, khi gõ nó không ra được CHỮ, KÝ TỰ ĐẶC BIỆT, CHỈ CHO GÕ ĐƯỢC SỐ VÀ SỐ ĐÓ LỚN HƠN 0? Cần chi phải thông với báo làm chi!
Dạ tại em cũng muốn nó như vậy bởi cái file của em code nó tự hiện cái chỉ số đó anh ạ
 
Upvote 0
Dạ tại em cũng muốn nó như vậy bởi cái file của em code nó tự hiện cái chỉ số đó anh ạ

Nếu bạn muốn như tôi nói, chỉ gõ được số và số đó phải lớn hơn 0 thì bạn chỉ cần chép trong Form như sau:

Mã:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If Not IsNumeric(Chr(KeyAscii)) Or Chr(KeyAscii) = 0 Then
        KeyAscii = 0
    End If
End Sub
 
Upvote 0
À, nếu mà chặn số 0 cũng không ổn vì nếu gõ vào 10 hay những giá trị lớn hơn 0 có từ 2 ký số trở lên thì sao! Phải sửa lại code một tí!

Mã:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If IsNumeric(Chr(KeyAscii)) Then
        If Len(TextBox1) = 0 And Chr(KeyAscii) = 0 Then
            KeyAscii = 0
        End If
    Else
        KeyAscii = 0
    End If
End Sub
 
Upvote 0
À, nếu mà chặn số 0 cũng không ổn vì nếu gõ vào 10 hay những giá trị lớn hơn 0 có từ 2 ký số trở lên thì sao! Phải sửa lại code một tí!

Mã:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If IsNumeric(Chr(KeyAscii)) Then
        If Len(TextBox1) = 0 And Chr(KeyAscii) = 0 Then
            KeyAscii = 0
        End If
    Else
        KeyAscii = 0
    End If
End Sub
Em thấy cách này còn hạn chế ở điểm: nếu gõ 10 sau đó xóa 1 => tiêu luôn anh ah.
 
Upvote 0
Cái này ngoài khả năng của mình tự viết, nhưng đã có Code trên GPE để bạn áp dụng
http://www.giaiphapexcel.com/forum/showthread.php?1303-Cách-đóng-hộp-MsgBox-tự-động/page3
Đã tham khảo trên địa chỉ sư phụ cho nhưng không ổn vì code quá rắc rối với những người mới học như em chẳng khác gì bảo trẻ lớp 1 làm toán lớp 10 cả các sư phụ ạ.
Em xin cắt mạch tranh luận của 2 anh dhn46 và anh Hoàng Trọng Nghĩa là em bài toán của em chỉ nhập 1 - 9 thực chất đây là giá trị số lượng hàng hóa và em muốn đặt thông báo này để chánh trường hợp đã hết hàng vẫn cứ nhập bởi thiếu msgbox thông báo cứ nhập ầm ầm thành ra số lượng vẫn cứ âm nhiệt tình mà không biết. và vì đã bị dính số - 1 đến -3 nên em muốn đặt điều kiện chỉ hiện thông báo <=0 thôi các sư phụ ạ. vì >0 thì giá trị sẽ là bằng 1 thì tất nhiên còn phải xuất rồi chứ ai dại gì để tồn phải không các sư phụ.
 
Lần chỉnh sửa cuối:
Upvote 0
Đã tham khảo trên địa chỉ sư phụ cho nhưng không ổn vì code quá rắc rối với những người mới học như em chẳng khác gì bảo trẻ lớp 1 làm toán lớp 10 cả các sư phụ ạ.
Em xin cắt mạch tranh luận của 2 anh dhn46 và anh Hoàng Trọng Nghĩa là em bài toán của em chỉ nhập 1 - 9 thực chất đây là giá trị số lượng hàng hóa và em muốn đặt thông báo này để chánh trường hợp đã hết hàng vẫn cứ nhập bởi thiếu msgbox thông báo cứ nhập ầm ầm thành ra số lượng vẫn cứ âm nhiệt tình mà không biết. và vì đã bị dính số - 1 đến -3 nên em muốn đặt điều kiện chỉ hiện thông báo <=0 thôi các sư phụ ạ. vì >0 thì giá trị sẽ là bằng 1 thì tất nhiên còn phải xuất rồi chứ ai dại gì để tồn phải không các sư phụ.

Tôi làm cho bạn một cái Form gọi là thay thế cái MsgBox như sau:

PHP:
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub UserForm_Activate()
    Call Counter
End Sub

Sub Counter()
    Dim iCount As Long, iCounter As Long
    For iCount = 0 To 60
        iCounter = iCount
        Sleep 15
'        Me.Repaint
        DoEvents
        If iCounter = 60 Then Unload Me
    Next
End Sub

Private Sub UserForm_Click()
    Unload Me
End Sub

OK, giờ bạn chỉ cần bấm nút lệnh trên sheet để vào show form của bạn, và bạn thử gõ gì đó từ 0 đến số âm xem sao nhé! Nếu đúng ý tại sao không bấm THANKS nhỉ?
 

File đính kèm

Upvote 0
À, cũng nói thêm, nếu bạn muốn nghe kêu bíp sau khi gõ không đúng thì sửa lại code 1 tí xíu nha!

Mã:
Private Sub TextBox1_Change()
    With TextBox1
        If .Value <= 0 Then
            [COLOR=#0000cd][B]Beep[/B][/COLOR]
            UsfMsgBox.Show
            .SetFocus [COLOR=#008000]'<< them cai nay vo cho chac an[/COLOR]
            .SelStart = 0
            .SelLength = Len(.Text)
        End If
    End With
End Sub
 
Upvote 0
Ngoài code áp dụng API của anh Nghĩa bạn cũng có thể áp dụng cách sau để Form tự tạo hiện sau 1 khoảng thời gian: Đưa vào sự kiện UserForm_Activate đoạn code sau
Mã:
Private Sub UserForm_Activate()
    Application.Wait Now + TimeValue("[COLOR=#ff0000][B]00:00:02"[/B][/COLOR])
    Unload Me
End Sub
thay đổi giá trị màu đỏ để đặt thời gian
(Híc tới giờ vẫn chưa thấy phản hồi kết quả đạt được, phải chăng các cách trên...tiêu luôn rùi?)
 
Upvote 0
Ngoài code áp dụng API của anh Nghĩa bạn cũng có thể áp dụng cách sau để Form tự tạo hiện sau 1 khoảng thời gian: Đưa vào sự kiện UserForm_Activate đoạn code sau
Mã:
Private Sub UserForm_Activate()
    Application.Wait Now + TimeValue("[COLOR=#ff0000][B]00:00:02"[/B][/COLOR])
    Unload Me
End Sub
thay đổi giá trị màu đỏ để đặt thời gian
(Híc tới giờ vẫn chưa thấy phản hồi kết quả đạt được, phải chăng các cách trên...tiêu luôn rùi?)


Theo tôi nghĩ, nên chọn giải pháp Application.Wait của dhn46 là hợp lý nhất vì code ngắn gọn dễ hiểu, hiệu quả!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Đã làm theo cách của anh Hoàng Trọng Nghĩa kết quả rất mỹ mãn theo đúng ý tưởng của em, xin chân thành cảm ơn các anh/chị đã giúp đỡ.
 
Upvote 0

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

Back
Top Bottom