返回列表 上一主題 發帖

[發問] call 模組後符合條件時,如何停止程式碼執行?

[發問] call 模組後符合條件時,如何停止程式碼執行?

本帖最後由 reangame 於 2014-5-22 00:05 編輯

執行一個日期選擇表單,點選確定後執行Call tutu模組,
  1. Sub tutu()
  2.    
  3.     Set sh = Sheets("開休市日期表")
  4.     Set r = sh.Columns("B").Find(md)
  5.     If Not r Is Nothing Then
  6.         md = ""
  7.     End If
  8.     If week = "星期六" Or week = "星期日" Or md = "" Then
  9.         MsgBox "所選日期為未開盤日,請重新選擇!", 0, "系統訊息"
  10.         End
  11.     End If

  12. End Sub
複製代碼
符合條件後停止程式碼繼續執行,但出現一個問題,停止後連表單都關閉了,
請問該如何修改可達成不關閉表單而停止程式碼執行?
我是斯多

補充一下,問題應該是出在代碼第10行,把End更改為Exit  sub時,只會停止模組的程式碼,還是會繼續執行表單的程式碼,如何全都停止又不關閉表單?
我是斯多

TOP

補充一下,問題應該是出在代碼第10行,把End更改為Exit  sub時,只會停止模組的程式碼,還是會繼續執行表單 ...
reangame 發表於 2014-5-22 00:07

把第十行移除就行了。
If ...... End If 執行完畢程式碼便會往下執行,直到 End Sub 即行跳離該程式模組 (Sub tutu()  ~  End Sub)。

TOP

回復 1# reangame
你的tutu可以改用function並回傳tutu的執行狀況給呼叫它的地方,再判斷該怎麼跳出。

如:
  1. Function tutu() as boolean
  2.     Set sh = Sheets("開休市日期表")
  3.     Set r = sh.Columns("B").Find(md)
  4.     If Not r Is Nothing Then
  5.         md = ""
  6.     End If
  7.     If week = "星期六" Or week = "星期日" Or md = "" Then
  8.         MsgBox "所選日期為未開盤日,請重新選擇!", 0, "系統訊息"
  9.         tutu = false
  10.     else
  11.         tutu = true
  12.     End If
  13. End Function
複製代碼
呼叫tutu的表單按鈕:
  1. Private Sub CommandButton1_Click()
  2.     if not tutu then exit sub
  3. End Sub
複製代碼

TOP

回復 3# c_c_lai

c_c_lai大大,您好:
您的方法已經測試過了,把End移除掉後,表單內的程式碼依舊會執行,我的需求是先Call模組程式碼執行,符合條件後,連同表單中的程式碼一起停止執行,不好意思喔!
我是斯多

TOP

本帖最後由 reangame 於 2014-5-24 17:49 編輯

回復 4# stillfish00

stillfish00大大,您好:
您的程式碼確實可以停止【選擇收盤日期】表單中的程式碼繼續運行,但產生一個延續性的問題,請看附圖:
555.jpg
表單中的Label=【星期六】為ComboBox_Change自動產生,【week】程式碼如下,
  1. Function week()
  2.     week = Format(DateSerial(ComboBox3.Text, ComboBox2.Text, ComboBox1.Text), "[$-404]aaaa;@")
  3. End Function
複製代碼
選擇完日期後點選確定,Call tutu模組後,不管選擇哪一天都是出現【所選日期為未開盤日,請重新選擇!】,也就是均不符合所設定的條件,
經詳細研究發現:tutu模組無法判斷表單中【week】的值,
請問該如何將表單中【Week】的值傳到tutu模組?
還請繼續指導,感謝大大!!!
我是斯多

TOP

回復  c_c_lai

c_c_lai大大,您好:
您的方法已經測試過了,把End移除掉後,表單內的程式碼依舊會執行 ...
reangame 發表於 2014-5-24 17:34

如果你需要呼叫模駔再做判斷,則請自行修正成 stillfish00 的涵式,
Function tutu() as boolean 如是符合條件後,連同表單中的程式碼一起停止執行。

TOP

本帖最後由 reangame 於 2014-5-25 16:37 編輯

回復 7# c_c_lai

c_c_lai大大,您好
我已經修改了,可是有個小問題,6樓的回覆http://forum.twbts.com/redirect. ... 5&fromuid=10492
表單的值,模組判斷不到=.=
可以指導一下嗎?
我是斯多

TOP

回復 4# stillfish00
回復 7# c_c_lai

兩位大大,您好:
我解決問題了,解決方式如下:
  1. Function tutu() As Boolean
  2.     Set sh = Sheets("開休市日期表")
  3.     md = 選擇收盤日期.ComboBox2.Value & "月" & 選擇收盤日期.ComboBox1.Value & "日"
  4.     Set r = sh.Columns("B").Find(md)
  5.      If Not r Is Nothing Then
  6.         md = ""
  7.     End If
  8.      If 選擇收盤日期.Label1 = "星期六" Or 選擇收盤日期.Label1 = "星期日" Or md = "" Then
  9.         MsgBox "所選日期為未開盤日,請重新選擇!", 0, "系統訊息"
  10.         tutu = False
  11.     Else
  12.         tutu = True
  13.     End If
  14. End Function
複製代碼
得到一個結論:
就是在模組程式碼中,要取用表單的值時,必須指定表單的物件名稱(如:選擇收盤日期.ComboBox2、選擇收盤日期.Label1 ),
之前都沒有指定表單名稱,都直接使用  ComboBox2.Value,因此模組都抓不到表單的值。
但是.....表單中的程序,如下:
  1. Function week()
  2.     week = Format(DateSerial(ComboBox3.Text, ComboBox2.Text, ComboBox1.Text), "[$-404]aaaa;@")
  3. End Function
複製代碼
仍然不知道該如何讓模組抓取到這個程序的值,
因此,我將week的值改用選擇收盤日期.Label1來代替,
不過還是很想知道表單中,程序所產生的值有什麼辦法可以讓模組直接取用???
我是斯多

TOP

回復 9# reangame
  1. Function week(Text3 As String, Text2 As String, Text1 As String) As String
  2.     week = Format(DateSerial(Text3, Text2, Text1), "[$-404]aaaa;@")
  3. End Function

  4. Sub Test()
  5.    Dim txt As String
  6.    
  7.    txt = week("2014", "5", "24")
  8.    MsgBox txt
  9. End Sub
複製代碼

TOP

        靜思自在 : 能幹不幹,不如苦幹實幹。
返回列表 上一主題