返回列表 上一主題 發帖

[發問] 請問迴圈及對話框

[發問] 請問迴圈及對話框

本帖最後由 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  
複製代碼
迴圈問題.rar (17.53 KB)


如果拿掉 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
複製代碼

本帖最後由 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大!
繼續消化語法中
真希望有多啦ㄟ夢的記憶吐司^^!!

TOP

回復 7# HSIEN6001
請修正  i = Application.CountA(Range("C:C"))-1   減掉 C1的 "英文"  就可以

TOP

回復 6# oobird


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

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

承蒙大家不吝教學!
謝謝!

TOP

回復 5# kevin681024


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

就是沒法找到答案,您肯花心力幫我解答~真的感謝!

TOP

回復 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
複製代碼

TOP

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

TOP

回復 3# HSIEN6001


    不好意思判斷沒寫好,哈
    改成下面這樣
  1. If IsNumeric(j) Then
  2.         j = CInt(j)
  3. End If
複製代碼
不然G大看起來更方便
    G大的好多了,還可以一次念多個單字
80 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 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
複製代碼

TOP

回復 2# kevin681024

你好!謝謝~^^
j = IIf(IsNumeric(j), CInt(j), j)--->會出現偵錯

TOP

        靜思自在 : 做該做的事是智慧,做不該做的事是愚癡。
返回列表 上一主題