返回列表 上一主題 發帖

[發問] 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
複製代碼
符合條件後停止程式碼繼續執行,但出現一個問題,停止後連表單都關閉了,
請問該如何修改可達成不關閉表單而停止程式碼執行?
我是斯多

回復 12# c_c_lai
回復 13# stillfish00

c_c_lai大大、stillfish00大大:
不好意思昨天出差去了,沒辦法上網,
依照stillfish00大大所說的:在week前面加上表單名稱就抓取的到week的值了,
原來就這麼簡單,真是汗顏  =.=....
不過,也更加深了我的印象,還是很感謝兩位大大的指導,感謝唷!
我是斯多

TOP

回復 9# reangame

表單中的程序,如下:
Function week() ......
還是很想知道表單中,程序所產生的值有什麼辦法可以讓模組直接取用???


釐清一下
tutu為模組中function,week為表單(選擇收盤日期)中function
要在tutu中呼叫week,需要前面掛上哪一個表單
如:
If 選擇收盤日期.week = "星期六" Or 選擇收盤日期.week = "星期日" Or md = "" Then

TOP

本帖最後由 c_c_lai 於 2014-5-26 07:28 編輯

回復 11# reangame
你的 week() 函數並沒有帶入引數之故。
  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
複製代碼
舉例:
  1.     Me.Label1.Caption = week(ComboBox3.Text,ComboBox2.Text,ComboBox1.Text)
  2.     '   ComboBox3.Text 等為引入值,亦即可為任何之字串引數,或許它為不同表單之 "選擇收盤日期B.ComboBoxA.Text"
複製代碼

TOP

本帖最後由 reangame 於 2014-5-25 22:48 編輯

回復 10# c_c_lai

c_c_lai大大,您好:
經測試您提供的程式碼後出現錯誤,如下圖:
5555.jpg
錯誤出現在以下程式碼:
  1. Private Sub ComboBox2_Change()
  2.     ComboBox1.Clear
  3.     rday = Day((DateSerial(ComboBox3.Text, ComboBox2.Text + 1, 1) - 1))
  4.     For i = 1 To rday
  5.         ComboBox1.AddItem i
  6.     Next i
  7.     ComboBox1.Text = Day(Date)
  8.     Me.Label1.Caption = week
  9. End Sub
複製代碼
程式碼錯誤出現在第8行的week,
請您再指導一下!
我是斯多

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

回復 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

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

回復 7# c_c_lai

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

TOP

回復  c_c_lai

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

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

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

        靜思自在 : 是非當教育,讚美作警惕。
返回列表 上一主題