![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 Josh Cheng ![]()
![]() |
小弟寫一個程式 1到100 想要在前端輸入有幾個不跑 遇到case 條件在inputbox輸入"2,3,5" 因知道inputbox輸入的是字串所以是找 『"2,3,5"』這條件 所以我用了Cint(inputbox),但是這樣會變成235 於是又有參考了eval的方法,但這函數沒有處理逗號的方式 所以...煩請大大解題 |
1樓 |
可以試試Split函數,參考看看https://www.twblogs.net/a/5b7f4a8b2b717767c6aed759
本篇文章回覆於2020-03-16 12:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓
作者回應
Josh Cheng ![]() |
謝謝hb大的回覆
但是主要是卡要讓逗號這個運算子讓程式辨識到 e.g. For i = 1 To 100 Select Case i Case inputbox //前端輸入2,3,5 or 1,2,3,4,5,6...,..,...,... Case Else: [ statements ] End Select Next
本篇文章回覆於2020-03-16 13:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓 |
用 instr 去尋找逗號,來處理
請參考 https://docs.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/instr-function
本篇文章回覆於2020-03-16 20:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
4樓 |
To Josh Cheng:
1F提供的資訊是要將前端輸入2,3,5的文字,拆成3個2、3、5等3個數字,再進行Select Case的處理,因為Split函數可以將含有『,』的字串,拆解成Array,再利用Array循環圈讀出每一數字再進行處理。 若問題不是如此,可能需要描述更清楚些?或Po出語法?
本篇文章回覆於2020-03-17 07:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
5樓
作者回應
Josh Cheng ![]() |
回香帥大
提供新的想法感覺不錯,晚點試試 謝謝!
本篇文章回覆於2020-03-17 13:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
6樓
作者回應
Josh Cheng ![]() |
回HB大,謝謝你的熱情回覆
你的方法我試過,但我沒試成功,爬了蠻多文,在想是不是case 後面的逗號跟陣列裡面的逗號意義不同的關係 但最後還是要用for加上你提供的Split寫出來一樣的邏輯 For i = 1 To count If UBound(boxarry)>=0 Then j=0 For UBound(boxarry) If i = Cint(boxarry(j)) Then Exit For End If j=j+1 Next End If Next 雖然CASE 的方式還是沒有解決,不過算是達到同樣的目的了,再次感謝
本篇文章回覆於2020-03-17 13:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
7樓 |
提供簡易的範例供參考,看看是否符須需求
本篇文章回覆於2020-03-17 17:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
8樓
作者回應
Josh Cheng ![]() |
回覆HB大
謝謝你提供簡潔有力的CODE 但主要的問題是我要在前端輸入條件,這也代表不只會有三個CASE而已,所以才會想用一欄多條件的CASE也就是case 1,2,3,.......這種寫法 所以才一直在執著有沒有可以直接讓code進行邏輯運算子的方法! 假設1到100 今天"2,3,5,6,9"不執行 明天"2,3,5,6,9,30,70"不執行
本篇文章回覆於2020-03-18 01:34
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
9樓
最有價值解答
HB ![]() |
To Josh Cheng:
1. strS = "2, 3, 5"只是舉例,幾個可以自行改變,但Select Case需同時設定,才能執行。 2. 從8F得知,只是將1 to 100間過濾所輸入之數字而已,提供下述語法供參考:
本篇文章回覆於2020-03-18 07:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
10樓
作者回應
Josh Cheng ![]() |
回覆HB大:
謝謝,後來也是用IF來完成,但是如果CASE能夠執行的話,是想用case比較方便 再次感謝了!
本篇文章回覆於2020-03-20 09:34
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
11樓 |
回覆HB大:
用InStr比對會有風險 .... Private Sub test() Dim strS As String strS = "2, 3, 5, 50, 78" For i = 1 To 100 If InStr(strS, i) > 0 Then List1.AddItem i End If Next End Sub
本篇文章回覆於2020-03-28 08:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
12樓 |
還是需要回到1F的觀念,修正語法如下:
本篇文章回覆於2020-03-28 13:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |