標題:
[發問]
請問迴圈及對話框
[打印本頁]
作者:
HSIEN6001
時間:
2012-4-26 14:27
標題:
請問迴圈及對話框
本帖最後由 HSIEN6001 於 2012-4-26 14:52 編輯
唉!好丟臉喔!
可以幫我看看迴圈語法?!
Sub SpeEnginBox()
Dim i, j, AA
i = Application.CountA(Range("C:C"))
If i = 1 Then
MsgBox "範圍內無英文語句", 16
Exit Sub
Else
AA:
Application.ScreenUpdating = False
j = InputBox("請問你要唸第幾句?" & vbNewLine & "(格式 1、2、3...)", , "")
If j = "" Then
MsgBox "您未輸入任何數字", 16
GoTo AA
Else
If j = 0 Then
MsgBox "超出範圍", 16
GoTo AA
Else
If j > i Then '--->請問這裡語法該怎麼下?
MsgBox "超出範圍", 16
GoTo AA
Else
End If
End If
End If
Application.DisplayAlerts = False
Set oSa = CreateObject("SAPI.SpVoice")
oSa.Volume = 100
oSa.Rate = -1
oSa.Speak Cells(j + 1, 3)
End If
End Sub
'另外:如果對話框按取消,則語法該如何下,才會離開迴圈;不顯示錯誤
'If InputBox(「Continue?」,vbYesNo)<>vbYes Then Exit Sub
複製代碼
[attach]10685[/attach]
如果拿掉 j>i 判讀 ;程式是可以跑
但我想加入那個判讀
Sub SpeEnginBox()
Dim i, j, AA
i = Application.CountA(Range("C:C"))
If i = 1 Then
MsgBox "範圍內無英文語句", 16
Exit Sub
Else
AA:
Application.ScreenUpdating = False
j = InputBox("請問你要唸第幾句?" & vbNewLine & "(格式 1、2、3...)", , "")
If j = "" Then
MsgBox "您未輸入任何數字", 16
GoTo AA
Else
If j = 0 Then
MsgBox "超出範圍", 16
GoTo AA
Else
End If
End If
Application.DisplayAlerts = False
Set oSa = CreateObject("SAPI.SpVoice")
oSa.Volume = 100
oSa.Rate = -1
oSa.Speak Cells(j + 1, 3)
End If
Application.ScreenUpdating = True
End Sub
複製代碼
作者:
kevin681024
時間:
2012-4-26 15:03
回復
1#
HSIEN6001
試試看這樣寫呢?
Sub SpeEnginBox()
Dim i, j, AA
With Application
i = .CountA(Range("C:C"))
.ScreenUpdating = False
.DisplayAlerts = False
End With
If i = 1 Then
MsgBox "範圍內無英文語句", 16
Exit Sub
End If
AA:
j = InputBox("請問你要唸第幾句?" & vbNewLine & "(格式 1、2、3...)", , "")
j = IIf(IsNumeric(j), CInt(j), j)
Do While Not (j > 0 And j < i)
Select Case j
Case ""
MsgBox "您未輸入任何數字", 16
Exit Sub
Case Is <= 0, Is >= i
MsgBox "超出範圍", 16
End Select
j = InputBox("請問你要唸第幾句?" & vbNewLine & "(格式 1、2、3...)", , "")
j = IIf(IsNumeric(j), CInt(j), j)
Loop
Set oSa = CreateObject("SAPI.SpVoice")
With oSa
.Volume = 100
.Rate = -1
.Speak Cells(j + 1, 3)
End With
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
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
、
這是特殊字元 程式理修改為
,
逗點
Sub SpeEnginBox()
Dim i, j, AA, Ar, E
i = Application.CountA(Range("C:C"))
If i = 1 Then
MsgBox "範圍內無英文語句", 16
Exit Sub
End If
AA:
j = InputBox("請問你要唸第幾句?" & vbNewLine & "(格式 1 ,2 ,3...)", , "")
Ar = Array(j) '將 J 轉入陣列
If j = "" Or j = 0 Then
If MsgBox("您未輸入任何數字 停止輸入 !!! ", vbYesNo) = vbYes Then Exit Sub
GoTo AA
ElseIf InStr(j, ",") Then '有輸入 格式 1、2、3...
Ar = Split(j, ",") '將 J 轉入陣列
For Each E In Ar '依序處裡 陣列的元素
If Val(E) < 1 Or Val(E) > i Then '1 到 J 之間
MsgBox "超出範圍", 16
GoTo AA
End If
Next
ElseIf InStr(j, ",") = 0 And IsNumeric(j) Then '是數字且 未輸入 格式 1、2、3...
If Val(j) <= 0 Or Val(j) > i Then
MsgBox "超出範圍", 16
GoTo AA
End If
ElseIf InStr(j, ",") = 0 And Not IsNumeric(j) Then '不是數字且 '未輸入 格式 1、2、3...
MsgBox "超出範圍", 16
GoTo AA
End If
Set oSa = CreateObject("SAPI.SpVoice")
For E = 0 To UBound(Ar) 'E為 陣列的數值
oSa.Volume = 100
oSa.Rate = -1
oSa.Speak Cells(Ar(E) + 1, 3)
If E < UBound(Ar) Then If MsgBox("「Continue?」 Next (" & Ar(E + 1) & " )", vbYesNo) <> vbYes Then Exit Sub
Next
End Sub
複製代碼
作者:
kevin681024
時間:
2012-4-26 16:19
回復
3#
HSIEN6001
不好意思判斷沒寫好,哈
改成下面這樣
If IsNumeric(j) Then
j = CInt(j)
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列無資料,判別應該在" 超出範圍"
我找不出改哪裡可避開無資料的第一筆~~哭~~
Sub SpeEnginBox()
Dim i, j, AA, Ar, E
i = Application.CountA(Range("C:C"))
If i = 1 Then
MsgBox "範圍內無英文語句", 16
Exit Sub
End If
AA:
j = InputBox("請問你要唸第幾句?" & vbNewLine & "(格式 1 ,2 ,3...)", , "")
Ar = Array(j) '將 J 轉入陣列
If j = "" Then
If MsgBox("您未輸入任何數字,停止輸入 !!! ", vbYesNo) = vbYes Then Exit Sub
GoTo AA
ElseIf InStr(j, ",") Then '有輸入 格式 1,2,3...
Ar = Split(j, ",") '將 J 轉入陣列
For Each E In Ar '依序處裡 陣列的元素
If Val(E) < 1 Or Val(E) > i Then '1 到 J 之間
MsgBox "超出範圍", 16
GoTo AA
End If
Next
ElseIf InStr(j, ",") = 0 And IsNumeric(j) Then '是數字且 超出有資料範圍---->這裡有i+1 標題列算進去的考量
If Val(j) <= 0 Or Val(j) > i Then
MsgBox "超出範圍", 16
GoTo AA
End If
ElseIf InStr(j, ",") = 0 And Not IsNumeric(j) Then '不是數字且 '未輸入 格式 1,2,3...
MsgBox "輸入錯誤!", 16
GoTo AA
End If
Set oSa = CreateObject("SAPI.SpVoice")
For E = 0 To UBound(Ar) 'E為 陣列的數值
oSa.Volume = 100
oSa.Rate = -1
oSa.Speak Cells(Ar(E) + 1, 3)
If E < UBound(Ar) Then If MsgBox("「Continue?」 Next (" & Ar(E + 1) & " )", vbYesNo) <> vbYes Then Exit Sub
Next
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/)