Board logo

標題: [發問] 請問迴圈及對話框 [打印本頁]

作者: HSIEN6001    時間: 2012-4-26 14:27     標題: 請問迴圈及對話框

本帖最後由 HSIEN6001 於 2012-4-26 14:52 編輯

唉!好丟臉喔!
可以幫我看看迴圈語法?!
  1. Sub SpeEnginBox()
  2. Dim i, j, AA
  3.     i = Application.CountA(Range("C:C"))
  4.     If i = 1 Then
  5.         MsgBox "範圍內無英文語句", 16
  6.         Exit Sub
  7.         Else
  8. AA:
  9.     Application.ScreenUpdating = False
  10.     j = InputBox("請問你要唸第幾句?" & vbNewLine & "(格式 1、2、3...)", , "")
  11.         If j = "" Then
  12.             MsgBox "您未輸入任何數字", 16
  13.             GoTo AA
  14.             Else
  15.             If j = 0 Then
  16.                 MsgBox "超出範圍", 16
  17.             GoTo AA
  18.                 Else
  19.                 If j > i Then      '--->請問這裡語法該怎麼下?
  20.                 MsgBox "超出範圍", 16
  21.                 GoTo AA
  22.                 Else
  23.                 End If
  24.             End If
  25.         End If
  26.         
  27.     Application.DisplayAlerts = False
  28.     Set oSa = CreateObject("SAPI.SpVoice")
  29.     oSa.Volume = 100
  30.     oSa.Rate = -1
  31.     oSa.Speak Cells(j + 1, 3)
  32.         
  33.     End If
  34. End Sub


  35.         '另外:如果對話框按取消,則語法該如何下,才會離開迴圈;不顯示錯誤
  36.         'If InputBox(「Continue?」,vbYesNo)<>vbYes Then Exit Sub  
複製代碼
[attach]10685[/attach]


如果拿掉 j>i 判讀 ;程式是可以跑
但我想加入那個判讀
  1. Sub SpeEnginBox()
  2. Dim i, j, AA
  3.     i = Application.CountA(Range("C:C"))
  4.     If i = 1 Then
  5.         MsgBox "範圍內無英文語句", 16
  6.         Exit Sub
  7.         Else
  8. AA:
  9.     Application.ScreenUpdating = False
  10.     j = InputBox("請問你要唸第幾句?" & vbNewLine & "(格式 1、2、3...)", , "")
  11.         If j = "" Then
  12.             MsgBox "您未輸入任何數字", 16
  13.             GoTo AA
  14.             Else
  15.             If j = 0 Then
  16.                 MsgBox "超出範圍", 16
  17.             GoTo AA
  18.                 Else
  19.             End If
  20.         End If
  21.         
  22.     Application.DisplayAlerts = False
  23.     Set oSa = CreateObject("SAPI.SpVoice")
  24.     oSa.Volume = 100
  25.     oSa.Rate = -1
  26.     oSa.Speak Cells(j + 1, 3)
  27.         
  28.     End If
  29.     Application.ScreenUpdating = True
  30. End Sub
複製代碼

作者: kevin681024    時間: 2012-4-26 15:03

回復 1# HSIEN6001
試試看這樣寫呢?
  1. Sub SpeEnginBox()
  2. Dim i, j, AA
  3.    
  4.     With Application
  5.         i = .CountA(Range("C:C"))
  6.         .ScreenUpdating = False
  7.         .DisplayAlerts = False
  8.     End With
  9.    
  10.     If i = 1 Then
  11.         MsgBox "範圍內無英文語句", 16
  12.         Exit Sub
  13.     End If
  14. AA:
  15.     j = InputBox("請問你要唸第幾句?" & vbNewLine & "(格式 1、2、3...)", , "")
  16.     j = IIf(IsNumeric(j), CInt(j), j)
  17.     Do While Not (j > 0 And j < i)
  18.         Select Case j
  19.         Case ""
  20.             MsgBox "您未輸入任何數字", 16
  21.             Exit Sub
  22.         Case Is <= 0, Is >= i
  23.             MsgBox "超出範圍", 16
  24.         End Select
  25.         j = InputBox("請問你要唸第幾句?" & vbNewLine & "(格式 1、2、3...)", , "")
  26.         j = IIf(IsNumeric(j), CInt(j), j)
  27.     Loop
  28.    
  29.     Set oSa = CreateObject("SAPI.SpVoice")
  30.     With oSa
  31.         .Volume = 100
  32.         .Rate = -1
  33.         .Speak Cells(j + 1, 3)
  34.     End With
  35.         
  36.     With Application
  37.         .ScreenUpdating = True
  38.         .DisplayAlerts = True
  39.     End With
  40.    
  41. End Sub
複製代碼

作者: HSIEN6001    時間: 2012-4-26 15:52

回復 2# kevin681024

你好!謝謝~^^
j = IIf(IsNumeric(j), CInt(j), j)--->會出現偵錯
作者: GBKEE    時間: 2012-4-26 15:56

回復 1# HSIEN6001
這是特殊字元 程式理修改為  ,  逗點
   
  1. Sub SpeEnginBox()
  2.     Dim i, j, AA, Ar, E
  3.     i = Application.CountA(Range("C:C"))
  4.     If i = 1 Then
  5.         MsgBox "範圍內無英文語句", 16
  6.         Exit Sub
  7.     End If
  8. AA:
  9.     j = InputBox("請問你要唸第幾句?" & vbNewLine & "(格式 1 ,2 ,3...)", , "")
  10.      Ar = Array(j)                                  '將 J 轉入陣列
  11.      If j = "" Or j = 0 Then
  12.             If MsgBox("您未輸入任何數字  停止輸入 !!! ", vbYesNo) = vbYes Then Exit Sub
  13.             GoTo AA
  14.     ElseIf InStr(j, ",") Then                               '有輸入 格式 1、2、3...
  15.         Ar = Split(j, ",")                                  '將 J 轉入陣列
  16.         For Each E In Ar                                    '依序處裡 陣列的元素
  17.             If Val(E) < 1 Or Val(E) > i Then                '1 到 J 之間
  18.                 MsgBox "超出範圍", 16
  19.                 GoTo AA
  20.             End If
  21.         Next
  22.     ElseIf InStr(j, ",") = 0 And IsNumeric(j) Then             '是數字且 未輸入 格式 1、2、3...
  23.         If Val(j) <= 0 Or Val(j) > i Then
  24.             MsgBox "超出範圍", 16
  25.             GoTo AA
  26.         End If
  27.     ElseIf InStr(j, ",") = 0 And Not IsNumeric(j) Then          '不是數字且 '未輸入 格式 1、2、3...
  28.         MsgBox "超出範圍", 16
  29.         GoTo AA
  30.     End If
  31.     Set oSa = CreateObject("SAPI.SpVoice")
  32.     For E = 0 To UBound(Ar)                                            'E為 陣列的數值
  33.         oSa.Volume = 100
  34.         oSa.Rate = -1
  35.         oSa.Speak Cells(Ar(E) + 1, 3)
  36.        If E < UBound(Ar) Then If MsgBox("「Continue?」 Next (" & Ar(E + 1) & " )", vbYesNo) <> vbYes Then Exit Sub
  37.     Next
  38. End Sub
複製代碼

作者: kevin681024    時間: 2012-4-26 16:19

回復 3# HSIEN6001


    不好意思判斷沒寫好,哈
    改成下面這樣
  1. If IsNumeric(j) Then
  2.         j = CInt(j)
  3. End If
複製代碼
不然G大看起來更方便
    G大的好多了,還可以一次念多個單字
作者: oobird    時間: 2012-4-26 16:40

這個當就做練習吧,因為從2007開始excel已有讀出儲存格的功能,能讀單字也能讀句子。
其實從2002就有了,但繁體版並沒有完善,讀出儲存格的圖示是灰色的並不能正常使用
簡體版就沒問題。2007以後的只要反白要讀的區域按一下讀出儲存格工具就會逐一讀出。
發音的品質取決於windows所安裝的tts語音引擎。
作者: HSIEN6001    時間: 2012-4-26 16:41

回復 4# GBKEE


    G大 ,不好意思!
我還不懂陣列,所以找不出為何輸入10 會直接退出
第10列無資料,判別應該在" 超出範圍"
我找不出改哪裡可避開無資料的第一筆~~哭~~
  1. Sub SpeEnginBox()
  2.     Dim i, j, AA, Ar, E
  3.     i = Application.CountA(Range("C:C"))
  4.     If i = 1 Then
  5.         MsgBox "範圍內無英文語句", 16
  6.         Exit Sub
  7.     End If
  8. AA:
  9.     j = InputBox("請問你要唸第幾句?" & vbNewLine & "(格式 1 ,2 ,3...)", , "")
  10.      Ar = Array(j)                                  '將 J 轉入陣列
  11.      If j = "" Then
  12.             If MsgBox("您未輸入任何數字,停止輸入 !!! ", vbYesNo) = vbYes Then Exit Sub
  13.             GoTo AA
  14.     ElseIf InStr(j, ",") Then                               '有輸入 格式 1,2,3...
  15.         Ar = Split(j, ",")                                  '將 J 轉入陣列
  16.         For Each E In Ar                                    '依序處裡 陣列的元素
  17.             If Val(E) < 1 Or Val(E) > i Then              '1 到 J 之間
  18.                 MsgBox "超出範圍", 16
  19.                 GoTo AA
  20.             End If
  21.         Next
  22.     ElseIf InStr(j, ",") = 0 And IsNumeric(j) Then             '是數字且 超出有資料範圍---->這裡有i+1 標題列算進去的考量
  23.         If Val(j) <= 0 Or Val(j) > i Then
  24.             MsgBox "超出範圍", 16
  25.             GoTo AA
  26.         End If
  27.     ElseIf InStr(j, ",") = 0 And Not IsNumeric(j) Then          '不是數字且 '未輸入 格式 1,2,3...
  28.         MsgBox "輸入錯誤!", 16
  29.         GoTo AA
  30.     End If
  31.     Set oSa = CreateObject("SAPI.SpVoice")
  32.     For E = 0 To UBound(Ar)                                            'E為 陣列的數值
  33.         oSa.Volume = 100
  34.         oSa.Rate = -1
  35.         oSa.Speak Cells(Ar(E) + 1, 3)
  36.        If E < UBound(Ar) Then If MsgBox("「Continue?」 Next (" & Ar(E + 1) & " )", vbYesNo) <> vbYes Then Exit Sub
  37.     Next
  38. End Sub
複製代碼

作者: HSIEN6001    時間: 2012-4-26 16:45

回復 5# kevin681024


    謝謝你!別這樣說
我很外行,有RUN看看
也有刪掉其中幾個試試!

就是沒法找到答案,您肯花心力幫我解答~真的感謝!
作者: HSIEN6001    時間: 2012-4-26 16:55

回復 6# oobird


    原來2007有提供這樣的服務
對于我這種外行才會在這裡∼∼〔瞎〕快樂!

藉由這樣給自己功課,才會找到許多解決問題的方法
真的是練習!

承蒙大家不吝教學!
謝謝!
作者: GBKEE    時間: 2012-4-26 16:59

回復 7# HSIEN6001
請修正  i = Application.CountA(Range("C:C"))-1   減掉 C1的 "英文"  就可以
作者: HSIEN6001    時間: 2012-4-26 17:05

本帖最後由 HSIEN6001 於 2012-4-26 17:10 編輯

回復 10# GBKEE

我才剛剛找到位置^^!!
        ElseIf InStr(j, ",") = 0 And IsNumeric(j) Then  '是數字且超出有資料範圍---->這裡有i 標題列算進去的考量
        If Val(j) <= 0 Or Val(j) > i - 1 Then

謝謝G大!
繼續消化語法中
真希望有多啦ㄟ夢的記憶吐司^^!!




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