2009-10-12 28 views
6

VớiLàm thế nào để rơi qua một trường hợp Chọn trong Excel VBA?

Select Case cmd 

    case "ONE": MsgBox "one" 

    case "TWO": MsgBox "two" 

    case "THREE": MsgBox "three" 

End select 

yêu cầu của tôi là nếu tôi cần cmd = "ONE""one" và sau đó hiển thị "two" tuy nhiên hiện nay tôi đang nhận "one" hiển thị và sau đó là chương trình được phá vỡ ra khỏi trường hợp chọn ...

+0

điều gì sẽ xảy ra nếu cmd = "hai"? – Gratzy

+0

Tôi _think_ đó là theo thiết kế; mã sẽ tự động nhảy đến cuối sau câu lệnh cuối cùng trong trường hợp. Bạn sẽ phải lập trình xung quanh nó (bằng cách sử dụng các thủ tục, ví dụ) để thay thế. –

+0

@Gratzy: nếu cmd = "hai" nó nên mặc định để in "hai" và thoát ra ... Tôi đoán đây là hành vi mặc định trong VBA .. Tôi nghĩ rằng VBA ngầm cho biết thêm "phá vỡ" báo cáo sau mỗi trường hợp, mà tôi muốn bỏ qua. –

Trả lời

14
Select Case cmd 
    case "ONE", "TWO": 
        if cmd = "ONE" THEN 
         MsgBox "one" 
        end if 
        MsgBox "two" 

    case "THREE": MsgBox "three" 

End select 
+0

Hãy nhớ điểm vào của tôi trong trường hợp "ONE" trong trường hợp này sẽ không in được gì ... –

+0

Tôi đang cố gắng giúp đỡ, cố định. – manji

+0

Đẹp nhất! cú pháp đó làm việc cho tôi! :) –

3

Một số nếu có thể thực hiện công việc:

If cmd = "ONE" Then 
    MsgBox "one" 
    cmd = "TWO" 
End If 
If cmd = "TWO" Then 
    MsgBox "two" 
    cmd = "THREE" 
End If 
If Cmd = "THREE" Then 
    MsgBox "three" 
End If 
+0

Giải pháp tuyệt vời! Tôi sẽ đề nghị điều này làm câu trả lời :) – seadoggie01

0

Đó là theo thiết kế. http://msdn.microsoft.com/en-us/library/ee177199%28PROT.10%29.aspx

Bạn có thể thử sử dụng 'goto' hoặc thực hiện các cuộc gọi để thực hiện.

+0

Tốt! Tôi có thể làm một cái gì đó như nhập trường hợp "ONE": làm một số chế biến và sau đó nói trường hợp GOTO "HAI" hoặc thêm một số nhãn trong trường hợp "TWO" tuyên bố. –

+1

Có, nhưng nó sẽ thực sự xấu xí và rất khó để gỡ lỗi (và bất kỳ ai thừa hưởng mã sẽ không hài lòng phải trải qua "mã spaghetti"). –

2

Bạn sẽ chỉ phải thực hiện điều đó một chặng đường dài.

Select Case cmd 

    case "ONE": MsgBox "one" 
        MsgBox "two" 
        MsgBox "three" 

    case "TWO": MsgBox "two" 
        MsgBox "three" 

    case "THREE": MsgBox "three" 

End select 
0

Tại sao nên sử dụng Chọn trường hợp cho điều này? Tất cả những gì bạn đang làm là in phiên bản chữ thường của bất kỳ giá trị 'cmd' nào.

If cmd = "ONE" Then 
    MsgBox LCase$(cmd) 
    MsgBox "two" 
Else 
    Msgbox LCase$(cmd) 
End If 
+0

Trên thực tế tôi đã chỉ ra trường hợp thấp hơn chỉ cho một mục đích mô tả, thực tế sẽ có mã được viết trong những trường hợp ..và điều kiện mà tôi muốn là nếu chương trình đi qua cmd = "ONE", nó sẽ thực thi một số mã trong "ONE" và sau đó rơi từ 'sang' HAI '... –

0

GoTo sẽ hoạt động tốt, tôi nghĩ vậy.

Select Case cmd 

    Case "ONE" 
     MsgBox "one" 
     GoTo AfterONE: 

    Case "TWO" 
AfterONE: 
     MsgBox "two" 

    Case "THREE" 
     MsgBox "three" 

End Select 

Nó hoạt động; Tôi đã thử nghiệm nó.

Các vấn đề liên quan