Board logo

標題: [發問] textbox簡易除錯 [打印本頁]

作者: LITTLEFAT7048    時間: 2015-4-12 21:24     標題: textbox簡易除錯

各位前輩您好:

請問一下textbox 簡易除錯該如何使用?
問題如下:

小弟是初學者,所以只會基本的。
假設共有四個textbox(以下簡稱tb)
tb5、tb6為一組但獨立;tb7、tb8為一組但獨立
因為是寫給別人用的,
所以要考慮所有可能性,
他有可能只有輸入tb5及tb6,然後tb7忘記刪除,所以就有以下的答案。
    If TB5.Value <> "" And TB6.Value <> "" And TB7.Value <> "" Then
    MsgBox "請擇一輸入"
    GoTo END1
    End If
   
如果輸入tb5,結果tb7忘記刪除,或者是本來是要輸入tb7的,tb5忘記刪除。
    If TB5.Value <> "" And TB7.Value <> "" Then
    MsgBox "請擇一輸入"
    GoTo END1
    End If
   
如果輸入tb6,結果tb7忘記刪除,或者是本來是要輸入tb7的,tb6忘記刪除。
    If TB6.Value <> "" And TB7.Value <> "" Then
    MsgBox "請擇一輸入"
    GoTo END1
    End If

以此類推;這些都是小弟寫的;
    If TB6.Value <> "" And TB8.Value <> "" Then
    MsgBox "請擇一輸入"
    GoTo END1
    End If

   
    If TB5.Value <> "" And TB6.Value <> "" And TB7.Value <> "" And TB8.Value <> "" Then
    MsgBox "請擇一輸入"
    GoTo END1
    End If

    If TB5.Value <> "" And TB7.Value <> "" And TB8.Value <> "" Then
    MsgBox "請擇一輸入"
    GoTo END1
    End If

    If TB6.Value <> "" And TB7.Value <> "" And TB8.Value <> "" Then
    MsgBox "請擇一輸入"
    GoTo END1
    End If

    If TB5.Value <> "" And TB6.Value <> "" And TB8.Value <> "" Then
    MsgBox "請擇一輸入"
    GoTo END1
    End If
   
    If TB5.Value = "" And TB6.Value = "" And TB7.Value = "" And TB8.Value = "" Then
    MsgBox "請擇一輸入"
    GoTo END1
    End If

就是tb5、tb6可同時輸入或只輸入一個,但是tb7「或」tb8輸入就要出現提示錯誤方塊。
或者是反過來說tb7、tb8可同時輸入或只輸入一個,但是tb5「或」tb6輸入就要出現提示錯誤方塊。
有辦法聰明一點的做法嗎?

附註一提,會用goto 是因為不知道怎樣結束,
新手發問,請各位體諒寫的內容非常落伍,謝謝!
作者: lpk187    時間: 2015-4-12 23:11

本帖最後由 lpk187 於 2015-4-12 23:12 編輯

回復 1# LITTLEFAT7048


忘記刪除?是什麼意思?如果忘記刪除可以用程式幫他刪除!
另,結束程序可以用 exit sub 或 end
作者: bobomi    時間: 2015-4-12 23:56

If Trim(TB5 + TB6) <> "" And Trim(TB7 + TB8) <> "" Then
   MsgBox "請擇一輸入"
   GoTo END1
End If
作者: LITTLEFAT7048    時間: 2015-4-13 01:00

回復 3# bobomi


可以用!謝謝您!
不過如果全部(5.6.7.8)都是空白的目前不會感應到,
雖然說那個情況應該是不會發生。

可以請問trim的用途嗎?

網路上是這麼寫:
Trim()        從目前的 String 物件中移除所有的前置和後端空白字元。
Trim(Char[])        從目前的 String 物件中移除陣列中指定之一組字元的所有前置和後端指定項目。

那這個要怎麼解釋?
    If Trim(TB5 + TB6) <> "" And Trim(TB7 + TB8) <> "" Then
如果TB5「或」TB6不等於空白,而且TB7「或」TB8不等於空白?然後...
(這樣好像沒有解釋到Trim....??)

而且為何TB5後面不需要.Value或是.Text之類的,真神奇!
雖然答案出來了,如果方便的話,可否告知解題過程?感謝您!
作者: LITTLEFAT7048    時間: 2015-4-13 01:07

回復 2# lpk187


忘記刪除,可能是TB5及TB7同時有文字,
但是我不能確定對方到底哪個是不要的,
所以只能用提示的跟他說,請擇一輸入!
這樣他就會把他不要的刪除掉。

幫他刪除的方式,小弟會用。
假設是TB5,那麼就用TB5.Text=""
初學者,都是土法練鋼呀XD...
可以達到目的,又可以讓自己了解,
但是如果有機會還是要多學一點方法:D...

再麻煩前輩們賜教了!謝謝您!
作者: bobomi    時間: 2015-4-13 07:30

不過如果全部(5.6.7.8)都是空白的目前不會感應到 --> 我漏看這條件

[法1]

A = Trim(TB5 + TB6)
B = Trim(TB7 + TB8)
If  A <> "" And B <> ""  OR  A ="" And B = "" Then
   MsgBox "請擇一輸入"
   GoTo END1
End If

[法2]

A = Trim(TB5 + TB6)
B = Trim(TB7 + TB8)
If  NOT (A =  ""  XOR  B = "" ) Then
   MsgBox "請擇一輸入"
   GoTo END1
End If

'===

Trim( ) : 如果你輸入的是全部是空白, 也算是等於你沒有輸入任何值

如果你允許輸入可以是全部是空白, 那就把 Trim() 踢除掉
踢除掉 Trim 應該就好理解了

'====
為何 TB5 後面不需要.Value ?  
.Value 是預設屬性, 沒寫時他自己會判斷成你就是要用 .Value
作者: LITTLEFAT7048    時間: 2015-4-17 23:02

回復 6# bobomi


看到美女老師回覆,當然要回,
抱歉抱歉,最近雜事比較多,比較慢回 >_<...

==

A = Trim(TB5 + TB6)
B = Trim(TB7 + TB8)
If  A <> "" And B <> ""  OR  A ="" And B = "" Then
   MsgBox "請擇一輸入"
   GoTo END1
End If

有點難O_O...
試著再解釋一次好了。
如果TB5或TB6都不是空白而且TB7及TB8都不是空白...
或是;
如果TB5或TB6都是空白而且TB7及TB8都是空白,然後... MsgBox "請擇一輸入"
不然Trim(TB5 + TB6)或是Trim(TB7 + TB8)其中一個空白均是End If
這樣翻譯感覺有順唷....(自我感覺良好XD...)

+在這裡應該是為了要讓TB5及TB6成一個群組?
然後再分別判斷的意思嗎?所以可以解釋為「或」的意思嗎?

==

A = Trim(TB5 + TB6)
B = Trim(TB7 + TB8)
If  NOT (A =  ""  XOR  B = "" ) Then
   MsgBox "請擇一輸入"
   GoTo END1
End If

這個寫法比較短,比較好。

對兩個 Boolean 運算式執行邏輯互斥 (Logical Exclusion),或對兩個數值運算式執行位元互斥 (Bitwise Exclusion)。

如果 expression1 為且 expression2 是result 的值為
True                                 True                   False
True                                 False                  True
False                                True                   True
False                                False                  False

照上面的說法,如果以A來說:
TB5="" 和TB6="" 為 False
TB5<>"" 和TB6="" 為 True
TB5="" 和TB6<>"" 為 True
TB5<>"" 和TB6<>"" 為 False

若A和B相比的話,
那麼A和B均為空白時,則為False;
均不等於空白時,也是False;

所以If NOT TRUE THEN MsgBox "請擇一輸入"
是這樣解釋嗎?

那問題又來了,
二個問題:
一、
為何要用A = Trim(TB5 + TB6)
而不用 A= TB5+TB6 呢?
好像一直被 Trim 這個函數卡到...

二、
(A =  ""  XOR  B = "" )這個式子中,
是為了要讓 TB5 和 TB6 分別去檢視是否和A=""相同是嗎?
舉例來說:
TB5=""   A=""   這樣兩個都是"",所以為False
TB5<>""    A=""    這樣為True
因為剛才上網找XOR的內容好像是要運算式,
所以才要給他一個等於(=)去做運算的感覺。

剛才試了一下,也可以用 (A<>"" XOR B<>"") 耶...
好像是沒什麼意義的試用,只是在測試 XOR 的意思而已...

==

Trim( ) : 如果你輸入的是全部是空白, 也算是等於你沒有輸入任何值

如果你允許輸入可以是全部是空白, 那就把 Trim() 踢除掉
踢除掉 Trim 應該就好理解了

所以如果是以Trim(TB5 + TB6)的函數來說的話,
如果裡面的值TB5=""  TB6<>"" 這樣要怎麼解釋呢?
如果裡面的值TB5=""  TB6=""又要怎麼解釋呢?

美女老師,真是抱歉,
因為初學,不懂的實在是比較多XD...

如您有空、有閒時,再麻煩您看一下問題即可,
謝謝您!
作者: mark15jill    時間: 2015-4-19 00:33

回復  bobomi


看到美女老師回覆,當然要回,
抱歉抱歉,最近雜事比較多,比較慢回 >_
LITTLEFAT7048 發表於 2015-4-17 23:02


個人小見解
  1. 1.另類的方式
  2. If tb5 <>"" or tb6 <>"" and tb7<>"" or tb8 <>"" then
  3.     MsgBox "請擇一輸入"
  4.     GoTo END1
  5. elseif tb5="" and tb6="" and tb7="" and tb8="" then
  6.     MsgBox "數值全空白,請重新輸入"
  7.     GoTo END1       
  8. End If



  9. 2.Trim(TB5+TB6)
  10. 2-1 TB5=""  TB6<>"" >>A = Trim(有資料) >> 移除空白字元後 >> A=有資料
  11. Ex:TB5=""   TB6=3   >>A = Trim(""+3)    >> 移除空白字元後 >> A=3   
  12. 2-2 TB5=""  TB6=""  >>A = Trim(空資料) >> 移除空白字元後 >> A=空資料
  13. Ex:TB5=""   TB6=""   >>A = Trim(""+"")    >> 移除空白字元後 >> A=""
  14.    
複製代碼

作者: bobomi    時間: 2015-4-21 20:46

先把 Trim( )  拿掉, 當作沒有寫過

    Code                ->        說明                                                   
(TB5 + TB6) <> "" -> 表示 TB5, TB6 二人之中 '至少有1人' 有 keyin
(TB7 + TB8) <> "" -> 表示 TB7, TB8 二人之中 '至少有1人' 有 keyin

If  (TB5 + TB6) <> "" And (TB7 + TB8) <> ""  Then

把 ↑↑↑↑↑↑ 的 Code 取代成 說明 得到 ↓↓↓↓↓↓

If  (TB5, TB6 二人之中 '至少有1人' 有keyin)   同時 (TB7, TB8 二人之中 '至少有1人' 有keyin) Then
   MsgBox "請擇一輸入"
   GoTo END1
end if
作者: LITTLEFAT7048    時間: 2015-4-30 10:58

謝謝mark前輩及bobomi美女老師!抱歉,上班時間都比較忙,而且公司網路有鎖,所以常常很慢回!
作者: Bluemirror    時間: 2015-4-30 17:38

>>Trim( ) : 如果你輸入的是全部是空白, 也算是等於你沒有輸入任何值
>>如果你允許輸入可以是全部是空白, 那就把 Trim() 踢除掉
>>踢除掉 Trim 應該就好理解了
Trim( )是用來檢查是否TB5~TB8有被輸入空白用的,如果輸入空白不會影響處理結果的話,就可以不必加。
比如輸入TB5及TB6,然後TB7被輸入一個空白,此時不用Trim( )的話,會被認為TB7是有值的,然後跳出MsgBox警示。
如果加了Trim( ),就會忽略空白的輸入而不會出現警示了!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)