Viết lệnh trong Option group (1 người xem)

Liên hệ QC

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

phuyen89

Thành viên tích cực
Tham gia
20/11/08
Bài viết
875
Được thích
341
Nghề nghiệp
Student
Chào mọi người em mày mò tập viết lệnh trong Option group.Em nghĩ nó cũng giống với Access nên em làm thế này.Mà khi chạy nó sai bét.Anh chị xem lại và chỉnh sửa giùm,do kiến thức còn non yếu,anh chị đừng chê cười nghen!
PHP:
Private Sub cmdChon_Click()
If opt1 = 1 Then
MsgBox "Ban chon nut 1"
ElseIf opt = 2 Then
MsgBox "Ban chon nut 2"
ElseIf opt = 3 Then
MsgBox "Ban chon nut 3"
Else
MsgBox "Ban khong chon nut nao"
End If
End Sub
Còn file em đính kèm:
 

File đính kèm

Chào mọi người em mày mò tập viết lệnh trong Option group.Em nghĩ nó cũng giống với Access nên em làm thế này.Mà khi chạy nó sai bét.Anh chị xem lại và chỉnh sửa giùm,do kiến thức còn non yếu,anh chị đừng chê cười nghen!
PHP:
Private Sub cmdChon_Click()
If opt1 = 1 Then
MsgBox "Ban chon nut 1"
ElseIf opt = 2 Then
MsgBox "Ban chon nut 2"
ElseIf opt = 3 Then
MsgBox "Ban chon nut 3"
Else
MsgBox "Ban khong chon nut nao"
End If
End Sub
Còn file em đính kèm:

Bạn ghi sai tùm lum hết, tên của nút Option bạn cũng ghi không đúng nữa làm sao mà chạy code được?

PHP:
Private Sub cmdChon_Click()
If opt1 Then
MsgBox "Ban chon nut 1"
ElseIf opt2 Then
MsgBox "Ban chon nut 2"
ElseIf opt3 Then
MsgBox "Ban chon nut 3"
Else
MsgBox "Ban khong chon nut nao"
End If
End Sub
 
Upvote 0
Bạn ghi sai tùm lum hết, tên của nút Option bạn cũng ghi không đúng nữa làm sao mà chạy code được?

PHP:
Private Sub cmdChon_Click()
If opt1 Then
MsgBox "Ban chon nut 1"
ElseIf opt2 Then
MsgBox "Ban chon nut 2"
ElseIf opt3 Then
MsgBox "Ban chon nut 3"
Else
MsgBox "Ban khong chon nut nao"
End If
End Sub
Khi mà không dùng Option button mà dùng checkbox cũng viết lệnh tuơn tự phải không bác Minhthien321.bac mở rộng cho em chút ít với
 
Upvote 0
Thì bạn copy code dán vào Form thôi mà!
Em mới phat hiện ra rằng cái Check box nó có thê chọ 3 nút một lượt luôn chú không phải mỗi làn chỉ chọn 1 nút bác minhthien321 ơi.Như thế thì khi chọn cả 2 nút thì phải thực thi 2 hành động minhthien321 ơi.Hay là phai them and khi mà ta chon 2 nút
 
Upvote 0
Em mới phat hiện ra rằng cái Check box nó có thê chọ 3 nút một lượt luôn chú không phải mỗi làn chỉ chọn 1 nút bác minhthien321 ơi.Như thế thì khi chọn cả 2 nút thì phải thực thi 2 hành động minhthien321 ơi.Hay là phai them and khi mà ta chon 2 nút

Chính vì đặc điểm này nên mới có Checkbox và Optionbutton chứ! Option chỉ được chọn 1 trong tất cả, còn Checkbox có thể chọn 1 hoặc tất cả đều được và khi Option đã chọn rồi không thể bỏ được, còn Checkbox thì chọn rồi có thể không chọn.
 
Upvote 0
Chính vì đặc điểm này nên mới có Checkbox và Optionbutton chứ! Option chỉ được chọn 1 trong tất cả, còn Checkbox có thể chọn 1 hoặc tất cả đều được và khi Option đã chọn rồi không thể bỏ được, còn Checkbox thì chọn rồi có thể không chọn.
The thì anh hương dẫn về cách cơ bản viết CODE trong cái checkbox này đi được không anh
 
Upvote 0
The thì anh hương dẫn về cách cơ bản viết CODE trong cái checkbox này đi được không anh

Bạn muốn yêu cầu gì thì nói rõ ra chứ ứng dụng với Check thì bao la ai mà biết được!

Đại loại như với 1 check và 1 option, bạn xem rồi tùy biến thôi.
PHP:
Private Sub cmdChon_Click()
If opt1 And CheckBox1 Then
  MsgBox "Ban chon nut 1 và checkbox1"
ElseIf opt1 Then
  MsgBox "Ban chon nut 1"
ElseIf CheckBox1 Then
  MsgBox "Ban chon CheckBox1"
Else
  MsgBox "Ban khong chon nut nao"
End If
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Chào mọi người em mày mò tập viết lệnh trong Option group.Em nghĩ nó cũng giống với Access nên em làm thế này.Mà khi chạy nó sai bét.Anh chị xem lại và chỉnh sửa giùm,do kiến thức còn non yếu,anh chị đừng chê cười nghen!
PHP:
Private Sub cmdChon_Click()
If opt1 = 1 Then
MsgBox "Ban chon nut 1"
ElseIf opt = 2 Then
MsgBox "Ban chon nut 2"
ElseIf opt = 3 Then
MsgBox "Ban chon nut 3"
Else
MsgBox "Ban khong chon nut nao"
End If
End Sub
Còn file em đính kèm:
Giả sử có 20 cái OptionButton, chẳng lẽ bạn viết 20 dòng lệnh sao?
Dùng vòng lập hay hơn:
PHP:
Private Sub cmdChon_Click()
  Dim OB As Control
  For Each OB In A.Controls
    If OB.Value = True Then MsgBox "Ban da chon " & OB.Caption
  Next
End Sub
(Trong file bạn đã đặt tên cho Frame1A)
 

File đính kèm

Upvote 0
Giả sử có 20 cái OptionButton, chẳng lẽ bạn viết 20 dòng lệnh sao?
Dùng vòng lập hay hơn:
PHP:
Private Sub cmdChon_Click()
  Dim OB As Control
  For Each OB In A.Controls
    If OB.Value = True Then MsgBox "Ban da chon " & OB.Caption
  Next
End Sub
(Trong file bạn đã đặt tên cho Frame1A)

Cảm ơn Thầy! Điểm chung chỉ là Msgbox, nhưng nếu thật sự là lệnh, và mỗi lệnh khác nhau thì cũng phải viết tất cả các lệnh chứ Thầy? Bởi chúng không có điểm chung thì sao? Làm sao làm vòng lặp được?
 
Upvote 0
Cảm ơn Thầy! Điểm chung chỉ là Msgbox, nhưng nếu thật sự là lệnh, và mỗi lệnh khác nhau thì cũng phải viết tất cả các lệnh chứ Thầy? Bởi chúng không có điểm chung thì sao? Làm sao làm vòng lặp được?
Đây chính là điểm tinh tế khi ta thiết kế UserForm --> Đã cho tất cả các OptionButton vào chung 1 Group thì đương nhiên chúng phải có đặc điểm gì đó chung chứ, đúng không
Ví dụ:
- Chọn OB1, chạy Sub Test1
- Chọn OB2, chạy Sub Test2
.....
- Chạy OBn, chạy Sub Testn
....
Đấy là điểm chung rồi ---> Và ta hoàn toàn có thể viết 1 vòng lập cho trường hợp này
(lý nào chung 1 Group mà trớt quớt nhau, thế thì Group làm gì)
 
Upvote 0
Đây chính là điểm tinh tế khi ta thiết kế UserForm --> Đã cho tất cả các OptionButton vào chung 1 Group thì đương nhiên chúng phải có đặc điểm gì đó chung chứ, đúng không
Ví dụ:
- Chọn OB1, chạy Sub Test1
- Chọn OB2, chạy Sub Test2
.....
- Chạy OBn, chạy Sub Testn
....
Đấy là điểm chung rồi ---> Và ta hoàn toàn có thể viết 1 vòng lập cho trường hợp này
(lý nào chung 1 Group mà trớt quớt nhau, thế thì Group làm gì)

Dạ, em cám ơn Thầy. Giờ em đã học thêm 1 điều nữa về tính logic!
 
Upvote 0
Ý mà Thầy ơi, em dốt về vòng lặp lắm, thí dụ học của Thầy được các Controls, nhưng làm sao gọi được các Action hả Thầy? Trong trường hợp này phải làm như thế nào? Xem File!
 

File đính kèm

Upvote 0
Ý mà Thầy ơi, em dốt về vòng lặp lắm, thí dụ học của Thầy được các Controls, nhưng làm sao gọi được các Action hả Thầy? Trong trường hợp này phải làm như thế nào? Xem File!
- Đưa các sub Test1, Test2, Test3 về cùng 1 Module
- Viết code cho UserForm
PHP:
Private Sub cmdChon_Click()
  Dim OB As Control
  For Each OB In A.Controls
    If OB.Value = True Then Run "Test" & Right(OB.Caption, 1)
  Next
End Sub
Đại khái thế, tùy trường hợp mà viết thôi
 
Upvote 0
Nói thêm 1 chút (kinh nghiệm thiết kế form): Có trường hợp người ta sẽ đặt Caption của OptionButton trùng với tên Sub, vậy lại càng dể viết
Ví dụ:
- Caption cho Opt1 là Test1
- Caption cho Opt2 là Test2
- Caption cho Opt3 là Test3
Vậy ta viết code cho UserForm như sau:
PHP:
Private Sub cmdChon_Click()
  Dim OB As Control
  For Each OB In A.Controls
    If OB.Value Then Run OB.Caption
  Next
End Sub
Quá gọn ---> Đã cho vào 1 Group thì ta phải làm gì đó để nó có "điểm chung" chứ, đúng không?
 
Upvote 0
Nói thêm 1 chút (kinh nghiệm thiết kế form): Có trường hợp người ta sẽ đặt Caption của OptionButton trùng với tên Sub, vậy lại càng dể viết
Ví dụ:
- Caption cho Opt1 là Test1
- Caption cho Opt2 là Test2
- Caption cho Opt3 là Test3
Vậy ta viết code cho UserForm như sau:
PHP:
Private Sub cmdChon_Click()
  Dim OB As Control
  For Each OB In A.Controls
    If OB.Value Then Run OB.Caption
  Next
End Sub
Quá gọn ---> Đã cho vào 1 Group thì ta phải làm gì đó để nó có "điểm chung" chứ, đúng không?

Đúng là quá tuyệt cú mèo! Chỉ một điều duy nhất là nếu OB.Caption bằng tiếng Việt thì thua Thấy hen! Cũng rắc rối chỗ là không thể dùng lệnh chung 1 Form được rồi, phải để qua Module mà để ở đây thì những thao tác trực tiếp trên Form thì hơi bất tiện, ví dụ phải đặt tên Form:

Sub Test1()
With UserForm1
.Textbox3 = .Textbox1 + .Textbox2
End with
End Sub
 
Upvote 0
Đúng là quá tuyệt cú mèo! Chỉ một điều duy nhất là nếu OB.Caption bằng tiếng Việt thì thua Thấy hen! Cũng rắc rối chỗ là không thể dùng lệnh chung 1 Form được rồi, phải để qua Module mà để ở đây thì những thao tác trực tiếp trên Form thì hơi bất tiện, ví dụ phải đặt tên Form:

Sub Test1()
With UserForm1
.Textbox3 = .Textbox1 + .Textbox2
End with
End Sub
Thì khi ấy đúng lấy theo Caption mà lấy theo name... ta đặt tên cho OB là Test1, Test2 ---> OK chứ
 
Upvote 0
Thì khi ấy đúng lấy theo Caption mà lấy theo name... ta đặt tên cho OB là Test1, Test2 ---> OK chứ

Em lại hỏi Thầy nữa nè! Tại sao em bẫy lỗi nếu không chọn điều kiện nào thì thông báo, thế nhưng nó lại báo liên tục theo số OB có trong A. Khắc phục ra sao vậy Thầy?+-+-+-+
PHP:
Private Sub cmdChon_Click()
  Dim OB As Control
  For Each OB In A.Controls
    If OB.Value Then Run OB.Name Else MsgBox "Ban phai chon 1 dieu kien!"
  Next
End Sub
 
Upvote 0
Tại sao em bẫy lỗi nếu không chọn điều kiện nào thì thông báo, thế nhưng nó lại báo liên tục theo số OB có trong A. Khắc phục ra sao vậy?
Câu này:
PHP:
 If OB.Value Then Run OB.Name Else MsgBox "Ban phai chon 1 dieu kien!"

Đặt trong vòng For, nghĩa là mỗi OB đều mỗi xét xem có chọn không, nếu chọn thì chạy 1 đoạn code, nếu không chọn thì báo lỗi.
Vậy trong 20 cái OB sẽ có tới ít nhất 19 cái không chọn, thì báo lỗi ít nhất 19 lần, không có gì lạ cả.

Vậy có 2 cách:
1. Dùng 1 biến đếm, đếm xem có bao nhiêu cái OB không chọn, nếu biến này bằng với A.Controls.Count thì mới báo lỗi.
PHP:
Private Sub cmdChon_Click()
  Dim OB As Control, Dem As Long
 For Each OB In A.Controls
    If OB.Value Then Run OB.Name Else Dem = Dem +1
  Next
If Dem = A.Controls.Count Then MsgBox "Ban phai chon 1 dieu kien!"
End Sub
2. Dùng 1 biến boolean, nếu không chọn thì giữ nguyên True, có 1 cái chọn thì đổi thành False. Cuối cùng vẫn còn True thì báo lỗi.

PHP:
Private Sub cmdChon_Click()
  Dim OB As Control, Loi As Boolean
  Loi = True
 For Each OB In A.Controls
    If OB.Value Then        Run OB.Name :  Loi = False
 Next
If Loi Then MsgBox "Ban phai chon 1 dieu kien!"
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn Thầy MỸ nhiều lắm ạ! Thầy ơi, theo như 2 cách của Thầy em đều thấy chạy rất tốt, nhưng cho em hỏi với kinh nghiệm của Thầy thì nên chạy theo phương án nào là tốt nhất ạ? Cách 1 hay cách 2?
(Em nghĩ là cách 2 của Thầy)
 
Upvote 0
Dĩ nhiên là cách 2. Cách 2 chỉ thay giá trị biến Loi có 1 lần hoặc khộng lần nào, cách 1 thay giá trị biến Dem 19 hoặc 20 lần.
 
Lần chỉnh sửa cuối:
Upvote 0
Đối với OptionButton còn dể (ít nhất còn phân biệt được cái nào = TRUE) chứ còn với CommandButton thi... ẹc.. ẹc... phải dùng đến ClassModule mới giải quyết được
Giả sử tôi có UserForm thế này:

attachment.php


Và có 10 Sub tương ứng với từng nút
Private Sub Test1()
MsgBox "Bam nut 1"
End Sub
Private Sub Test2()
MsgBox "Bam nut 2"
End Sub
.....
Private Sub Test10()
MsgBox "Bam nut 10"
End Sub
--------------------------
Bài toán đặt ra là làm sao khi tôi click nút nào thì chạy sub ấy ---> Chả lẽ viết 10 code cho 10 Button? Vẫn là For.. Next nhưng phải kết hợp với Class
1> Insert 1 Class Module với code sau:
PHP:
Public WithEvents CB As CommandButton
Private Sub CB_Click()
  Run CB.Name
End Sub
2> Code trong UserForm như sau:
PHP:
Dim Button(1 To 10) As New Class1
Private Sub UserForm_Initialize()
  Dim i As Long, Cmd As Control
  For Each Cmd In UserForm1.Frame1.Controls
    i = i + 1
    Set Button(i).CB = Cmd
  Next Cmd
End Sub
Khởi động Form và bấm nút thử
(xem file đính kèm)
Trò chơi này còn được ứng dụng để giải quyết nhiều bài toán khác liên quan đến các sự kiện do người dùng tự tạo ra
-------------------------------
Xong bài này, mời các bạn áp dụng nó để làm giống hình này xem

attachment.php


Tức khi ta click nút nào thì Label bên cạnh sẽ hiện màu giống với màu của Button vừa click (Ẹc... Ẹc... rất đơn giản)
 

File đính kèm

  • untitled3.JPG
    untitled3.JPG
    35 KB · Đọc: 49
  • CmdWasClicked.xls
    CmdWasClicked.xls
    43.5 KB · Đọc: 18
  • untitled4.JPG
    untitled4.JPG
    15.2 KB · Đọc: 49
Lần chỉnh sửa cuối:
Upvote 0
Ndu à, mình có thể đưa thẳng code vào sub class chứ để 10 sub trong module thì rối quá.
 
Upvote 0
Ndu à, mình có thể đưa thẳng code vào sub class chứ để 10 sub trong module thì rối quá.
Dạ vâng! 10 sub ấy là em ví dụ thôi ---> Cũng có thể trong thực tế chỉ có 1 sub hoặc thậm chí chẳng có sub nào
Mục đích cuối cùng là làm sao phát hiện được ta vừa click button nào thôi anh à!
Em đưa file này cho anh xem (không có 1 sub nào cả)
 

File đính kèm

Upvote 0
Ndu à, mình có thể đưa thẳng code vào sub class chứ để 10 sub trong module thì rối quá.
còn tuy công việc chứ. nếu đưa vào class, khi cần sửa code lai vạo class sửa thì chua lắm.
class bao ở ngoài còn những công việc cụ thể thì để trong modul hoặc các sub của form hay hơn.
tôi nghĩ nên gán1 giá trị ban đầu cho biến i vì lỡ may trong ctrình có 1 nơi nào đó có biến i và nó chưa được reset thì khi chạy ctrình sẽ dễ bị lỗi.
 
Lần chỉnh sửa cuối:
Upvote 0
bảng tra xác suất thống kê

Chào mọi người em mày mò tập viết lệnh trong Option group.Em nghĩ nó cũng giống với Access nên em làm thế này.Mà khi chạy nó sai bét.Anh chị xem lại và chỉnh sửa giùm,do kiến thức còn non yếu,anh chị đừng chê cười nghen!
PHP:
Private Sub cmdChon_Click()
If opt1 = 1 Then
MsgBox "Ban chon nut 1"
ElseIf opt = 2 Then
MsgBox "Ban chon nut 2"
ElseIf opt = 3 Then
MsgBox "Ban chon nut 3"
Else
MsgBox "Ban khong chon nut nao"
End If
End Sub
Còn file em đính kèm:

tôi muốn có bảng tra môn xác suất thống kê để làm bài tập, bạn có ko post lên đi , cám ơn nhiều//**/
 
Upvote 0

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

Back
Top Bottom