Tại sao cái Option của tôi không chịu nhận giá trị

Liên hệ QC

dvu58

Thành viên thường trực
Tham gia
29/4/07
Bài viết
298
Được thích
378
Áp dụng những cái đã học từ GPE, tôi tạo ra 1 workbook xuất số ngẫu nhiên.
Trong workbook này, tôi làm thử 3 nút bấm:
1. Nút 1: Xuất số ngẫu nhiên: Chạy được
2. Nút 2: Kiểm tra (kiểm tra các số trùng nhau): Chạy được.
3. Nút 3: Tạo ra 1 form có 6 Option: Để xóa,.... Nhưng đã bị "Em nỡ lạnh lùng đến thế sao". Khổ quá, xem đi xem lại mà vẫn không phát hiện ra lỗi. Có lẽ các option không chịu nhận giá trị.

Kính gởi diễn đàn mong sự hỗ trợ. Cảm ơn các bạn nhiều.
 

File đính kèm

  • MASO NGAUNHIEN2.rar
    41.4 KB · Đọc: 37
Lần chỉnh sửa cuối:
Chào bạn,

Bạn xem file đính kèm nha.

TP.
 

File đính kèm

  • MASO NGAUNHIEN2.zip
    46.7 KB · Đọc: 55
Bạn xem lại nhé, sau đó tự tìm hiểu là tại sao lại như vậy.

Thân!


P/S : Không phải lúc nào lập trình cũng là tốt, nhiều khi cách lập trình tốt nhất là . . . không lập trình gì cả (tự nhiên thêm biến Opt làm gì cho mệt)
 

File đính kèm

  • MASO NGAUNHIEN2.7z
    37.1 KB · Đọc: 37
Chào bác dvu58 !
File của bác thấy cũng hay đấy, nếu được bác có thể cho mọi người biết ứng dụng của file này dùng cho việc gì được không ?
Cảm ơn bác !
 
vungoc đã viết:
Chào bác dvu58 !
File của bác thấy cũng hay đấy, nếu được bác có thể cho mọi người biết ứng dụng của file này dùng cho việc gì được không ?
Cảm ơn bác !

Cảm ơn vungoc đã có lời động viên.

Trước hết, mình chỉ muốn thực hành những kiến thức đã học từ GPE (như một bài tập thực hành). Thông qua những thực hành nho nhỏ thế này mình mong ước có 1 ngày nào đó mình biết nhiều hơn về VBA chứ mình không có nhiều điều kiện để được học hành tới nơi tới chốn.

Sau đó, nếu thành công thì mình muốn nó hỗ trợ mình vào việc tạo mã ngẫu nhiên cho việc làm các phách bài thi phục vụ cho việc chấm thi (mình chỉ cần thêm 1 sheet: Mã phách cho từng tệp bài thi với việc móc nối các mã đã lập ngẫu nhiên) cho đỡ khổ vậy mà.

Nhân tiện cũng rất cảm ơn 2 bạn Mr Okebab và ttphong2007.

Mong các bạn giúp thêm ý kiến nhé.
 
Lần chỉnh sửa cuối:
Ờ, các bạn ơi, ngoài các cách mà các bạn đề nghị (rất hay, gọn) nhưng nếu trường hợp (mình muốn hiểu rộng hơn 1 chút) về sử dụng OptionButton (để có thể ứng dụng vào lúc nào đó cần thiết) thì sao? Các bạn nói rõ thêm đi nhé.

Mình cũng xin hỏi thêm Mr Okebab: Sử dụng select case với if thì cái nào nhanh hơn? Mình có đọc trong 1 cuốn sách nào đó (không còn nhớ nữa) thì có ý kiến cho rằng select case sẽ nhanh hơn if. Băn khoăn quá.
 
dvu58 đã viết:
Ờ, các bạn ơi, ngoài các cách mà các bạn đề nghị (rất hay, gọn) nhưng nếu trường hợp (mình muốn hiểu rộng hơn 1 chút) về sử dụng OptionButton (để có thể ứng dụng vào lúc nào đó cần thiết) thì sao? Các bạn nói rõ thêm đi nhé.

Mình cũng xin hỏi thêm Mr Okebab: Sử dụng select case với if thì cái nào nhanh hơn? Mình có đọc trong 1 cuốn sách nào đó (không còn nhớ nữa) thì có ý kiến cho rằng select case sẽ nhanh hơn if. Băn khoăn quá.

Bạn thân mến.

Trước hết bạn phải hiểu rõ về Select Case : Nó thường dùng khi ta xét đến sự thay đổi của 1 đối tượng, 1 sự việc.(một cái gì đó chung)
Đây là câu ĐK rẽ nhánh, nó sẽ xét các ĐK từ trên xuống. Nếu thấy không thỏa mãn thì xét tiếp, nếu thấy thỏa mãn thì thực hiện lệnh tại TH này và thoát.

Vì vậy Select Case giống như if (cũng xét các ĐK như vậy).
Tuy nhiên Select Case do dùng chung 1 đối tượng(chỉ xét sự thay đổi) nên lập trình nhanh hơn. Chính vì lý do đó mà Case lại không linh hoạt bằng if

VD :Bạn xem các VD dưới đây thì sẽ thấy sự khác nhau.

Mã:
Option Explicit
----------------------------------------------

Sub tam1()
Dim i As Long
    If Range("A3") = 0 Then
        i = 1
    ElseIf Range("A3") = 1 Then
        i = 12
    ElseIf Range("A3") = 2 Then
        i = 123
    ElseIf Range("A3") = 3 Then
        i = 1234
    ElseIf Range("A3") = 4 Then
        i = 12345
    End If
    
    MsgBox i
    
End Sub

---------------------------------------------------------------------

Sub tam2()
Dim i As Long
    If Range("A3") = 0 Then
        i = 1
    ElseIf Range("A3") = 1 And Range("A10") <> 0 Then
        i = 12
    ElseIf Range("A3") = 2 And Range("A11") <> 1 Then
        i = 123
    ElseIf Range("A3") = 3 And Range("A12") <> 2 Then
        i = 1234
    ElseIf Range("A3") = 4 Then
        i = 12345
    End If
    
    MsgBox i
    
End Sub

------------------------------------------------------------------

Sub tam3()
Dim i As Long
    Select Case Range("A3")
    Case 0
        i = 1
    Case 1
        i = 12
    Case 2
        i = 123
    Case 3
        i = 1234
    Case 4
        i = 12345
    End Select
    
    MsgBox i
    
End Sub

Thân!

P/S : Trình độ VBA và lập trình của mình cũng có hạn, nếu có thiếu sót mong mọi người chỉ giáo. Thanks
 
3. Nút 3: Tạo ra 1 form có 6 Option: Để xóa,.... Nhưng đã bị "Em nỡ lạnh lùng đến thế sao". Khổ quá, xem đi xem lại mà vẫn không phát hiện ra lỗi. Có lẽ các option không chịu nhận giá trị.

Thực ra tất cả đều chạy tốt.
Tuy nhiên biến Opt được gán vào mỗi khi Option được chọn lại biến mất khi kết thúc thủ tục (khi chọn xong)

Như vậy khi bạn nhấn OK thì đã là thủ tục khác, do đó biến sẽ không còn.

Như vậy nếu muốn sử dụng Opt thì bạn phải cho vào trong thủ tục OK

Thân!
 
Mr Okebab đã viết:
Thực ra tất cả đều chạy tốt.
Tuy nhiên biến Opt được gán vào mỗi khi Option được chọn lại biến mất khi kết thúc thủ tục (khi chọn xong)

Như vậy khi bạn nhấn OK thì đã là thủ tục khác, do đó biến sẽ không còn.

Như vậy nếu muốn sử dụng Opt thì bạn phải cho vào trong thủ tục OK

Thân!

Cản ơn bạn nhiều nhiều lắm.
 
Web KT
Back
Top Bottom