標題:
[發問]
VBA某整段程式碼不執行(GoTo)的語法
[打印本頁]
作者:
ziv976688
時間:
2017-10-20 02:40
標題:
VBA某整段程式碼不執行(GoTo)的語法
請問各位大大:
紅色整段程式碼
不執行
的語法編寫?
謝謝!
Private Sub CommandButton1_Click()
OOOOOOOOOO
OOOOOOOOOOO
OOOOOOOO
OOOOOOOOOO
OOOOOOOOOOOOO
XXXXXXXXX
XXXXXXXXXX
XXXXXX
XXXXXXX
XXXXXXXXX
XXXXXXXXXXXXX
OOOOOOOOOOO
OOOOOOOOOOOOO
OOOOOO
OOOOOOOO
OOOOO
End Sub
作者:
ziv976688
時間:
2017-10-20 06:08
也就是說:如何
跳過
紅色整段
的程式碼,繼續執行後面
黑色
的程式碼?
謝謝!
作者:
jcchiang
時間:
2017-10-20 12:39
OOOOOOOOOO
OOOOOOOOOOO
OOOOOOOO
OOOOOOOOOO
OOOOOOOOOOOOO
goto line1
XXXXXXXXX
XXXXXXXXXX
XXXXXX
XXXXXXX
XXXXXXXXX
XXXXXXXXXXXXX
line1:
OOOOOOOOOOO
OOOOOOOOOOOOO
OOOOOO
OOOOOOOO
OOOOO
作者:
ziv976688
時間:
2017-10-20 13:08
本帖最後由 ziv976688 於 2017-10-20 13:17 編輯
回復
3#
jcchiang
J大:您好!
感謝回應!但這樣
並沒有
跳過
紅色
整段
的程式碼,
直接繼續
執行
後面黑色
的程式碼,
還是會
執行紅色段落
的程式碼^^"
發帖前:我有爬文,也是看到只要goto "標記"即可!但是嘗試了半天就是不行(
如下所示
),所以才上來發問。
OOOOOOOOOO
OOOOOOOOOOO
OOOOOOOO
OOOOOOOOOO
OOOOOOOOOOOOO
goto 101
XXXXXXXXX
XXXXXXXXXX
XXXXXX
XXXXXXX
XXXXXXXXX
XXXXXXXXXXXXX
101:
OOOOOOOOOOO
OOOOOOOOOOOOO
OOOOOO
OOOOOOOO
OOOOO
作者:
jcchiang
時間:
2017-10-20 13:45
回復
4#
ziv976688
我都這樣使用的,可以提供程式嗎??
作者:
ziv976688
時間:
2017-10-20 15:13
本帖最後由 ziv976688 於 2017-10-20 15:22 編輯
回復
5#
jcchiang
J大:您好!
最主要是
列328~列390
(機率表)的部分:因為尚有疑問待決,所以想先暫
不執行
。
有特意將
列2
'
,Msrr(1 To 49), Urr(1 To 49)
點綠
不執行
但按執行鍵後,
還是會停在
列358
顯示
編輯錯誤
的警示框^^"
範例檔下載網址:
http://www.FunP.Net/876373
作者:
naruto018
時間:
2017-10-20 17:39
回復
6#
ziv976688
應該是你的GoTo指令放錯位置了
放在Else後面試試看
if....
....
'機率表.....
GoTo line1 '---->移去後面
Else
'<-----移到這個位置
....
line1:
End If
複製代碼
作者:
ziv976688
時間:
2017-10-20 18:08
回復
7#
naruto018
n大:您好!
謝謝回應^^
GoTo指令放在Else下一列
結果一樣:
還是會停在
列358
顯示
編輯錯誤
的警示框
QQ
作者:
ziv976688
時間:
2017-10-20 20:02
本帖最後由 ziv976688 於 2017-10-20 20:10 編輯
回復
1#
ziv976688
[attach]27821[/attach]
原附檔
程式碼太長~重新上傳附檔和說明:
If a = INnum(N2 - 1) Then
'比對期數的列
'列178
Sheets.Add
ActiveSheet.Name = "Sheet1"
ActiveWindow.Zoom = 75 '縮放
' 複製"Sheet1"內容
[A4].Resize(3, 79).Copy Sheets("Sheet1").Cells(4, 1) '複製DATA=A4:CA6貼上A4
Cells(In1rr(N1 - 1) + 6, 1).Resize(In2rr(numh) - In1rr(N1 - 1) + 1, 1).Copy Sheets("Sheet1").Cells(7, 1) '複製DATA=A&StrRng到A&mthcount期數貼上A7
Cells(In1rr(N1 - 1) + 6, 2).Resize(In2rr(numh) - In1rr(N1 - 1), 7).Copy Sheets("Sheet1").Cells(7, 2) '複製DATA=B&StrRng到H&mthcount-1期數貼上B7
Cells(a.Row + 1, 1).Resize(In2rr(numh) - a.Row + 6, 1).Copy Sheets("Sheet1").Cells(7, 9) '複製DATA=A欄比對期數+1到mthcount期數貼上I7
Cells(a.Row + 1, 2).Resize(In2rr(numh) - a.Row + 5, 7).Copy Sheets("Sheet1").Cells(7, 10) '複製DATA=B:H欄比對期數+1到mthcount期數貼上J7
Cells(In1rr(N1 - 1) + 6, 1).Resize(a.Row - In1rr(N1 - 1) - 5, 8).Copy Sheets("Sheet1").Cells(In2rr(numh) - a.Row + 13, 9) '複製DATA=A:H欄起始期數到比對期數貼上I & mthcount-比對期數+13
a.Copy Sheets("Sheet1").Cells(In2rr(numh) - In1rr(N1 - 1) + 7, a.Column) '複製搜尋值貼上mthcount期數B:H同欄
a.Copy Sheets("Sheet1").Cells(In2rr(numh) - a.Row + 12, a.Column + 8) '複製搜尋值貼mthcount-比對期數+12列的J:P同欄
Sheets("Sheet1").Range("AN5") = Cells(a.Row, 1) '指定的各比對期數
' 複製&字體標示
Sheets("Sheet1").Cells(7, 1).Resize(In2rr(numh) - In1rr(N1 - 1) + 1, 8).Copy Sheets("Sheet1").Cells(7, 25) '複製A:H貼上Y
Sheets("Sheet1").Cells(7, 9).Resize(In2rr(numh) - In1rr(N1 - 1) + 1, 8).Copy Sheets("Sheet1").Cells(7, 17) '複製I:P貼上Q
Sheets("Sheet1").Cells(7, 9).Resize(In2rr(numh) - In1rr(N1 - 1) + 1, 1).Font.ColorIndex = 9 'I欄字體標示
Sheets("Sheet1").Cells(7, 17).Resize(In2rr(numh) - In1rr(N1 - 1) + 1, 1).Font.ColorIndex = 10 'Q欄字體標示
Sheets("Sheet1").Cells(7, 1).Resize(In2rr(numh) - In1rr(N1 - 1) + 1, 32).Copy Sheets("Sheet1").Cells(7, 47) '複製A:P貼上AU
Sheets("Sheet1").Range("B8").Select
ActiveWindow.FreezePanes = True '凍結視窗
Sheets("Sheet1").Move
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs MyPath & "\49AC_" & INnum(N2 - 1) & "_" & Inlog(LOGN - 1) & "_" & In2rr(numh) & "-" & In1rr(N1 - 1) & "-" & Sheets("Sheet1").Range("AN5") & ".xls"
ActiveWindow.Close
'GoTo l01
'機率表.........................................................................................
'列207
Else
Sheets.Add
ActiveSheet.Name = "機率表"
Sheets(1).Cells.RowHeight = 20 '列高
ActiveWindow.Zoom = 75 '縮放
Sheets(1).Range("B2").Select
ActiveWindow.FreezePanes = True
With Sheets(1).[A1:F50]
.HorizontalAlignment = xlCenter
.Font.FontStyle = "粗體"
.Font.Size = 14
End With
Sheets(1).[A1:F50].Font.Name = "Arial"
Sheets(1).[a1] = "推測數字"
Sheets(1).[A1:A50].Font.ColorIndex = 7
Sheets(1).[A1:A50].NumberFormatLocal = "00"
Sheets(1).[B1] = "次數"
Sheets(1).[B1:B50].Font.ColorIndex = 11
Sheets(1).[C1] = "中獎數字"
Sheets(1).[C1:C8].Font.ColorIndex = 3
Sheets(1).[C1:C8].NumberFormatLocal = "00"
Sheets(1).[D1] = "中獎機率"
Sheets(1).[D2] = "=Count(C2:C8)/Count(A2:A50)"
Sheets(1).[D1:D2].Font.ColorIndex = 3
Sheets(1).[D2].NumberFormatLocal = "0.0%"
Sheets(1).Range("D2").Borders.LineStyle = xlContinuous
Sheets(1).Columns("A:E").EntireColumn.AutoFit '自動欄寬
Erase Msrr, Urr '清除機率表記錄
Sheets("機率表").Move
ActiveWorkbook.SaveAs mypath1 & "\49AC機_" & Numberx & "_" & Inlog(LOGN - 1) & "_" & In2rr(numh) & "-" & In1rr(N1 - 1) & ".xls"
ActiveWindow.Close
'.......................................................................
'列240
'101:
End If
'列244
...................
...................
...................
End Sub
'列255
最主要是
列207~列240
(機率表)的部分:因為
尚有疑問待決
,所以想先暫
不執行
。
請問:
不執行
TEST(1020)-B
列207:240
的程式碼,其程式碼
應如何再編寫
~
才可令程式碼由
列204
直接跳到
列244(End If)繼續執行
(即其執行效果=
TEST(1020)-A
)?
謝謝!
作者:
ziv976688
時間:
2017-10-20 23:36
[attach]27824[/attach]
不知為什麼依照爬文所得的資訊操作~卻不能解決問題?
勞駕各位大大不吝指導!謝謝!
作者:
jackyq
時間:
2017-10-21 06:53
本帖最後由 jackyq 於 2017-10-21 06:55 編輯
因為 GoTo l01 看起來以為是 3各數字 101
但其實他是 GoTo L01 ( L的小寫在 VBA IDE 下看起來根本就如同1, 因而誤以為真的是1 )
作者:
naruto018
時間:
2017-10-21 15:39
回復
8#
ziv976688
1.列358是下面這一行嗎?因為我執行時發生,錯誤不是出現在這一行
Sheets(1).[D2].NumberFormatLocal = "0.0%"
複製代碼
2.如果goto沒法用,你可以把那一段都變成註解就好了
使用編輯工具列的 "使程式行變為註解",還原的話使用他右邊那個按鈕"使註解還原為程式"
[attach]27832[/attach]
作者:
ziv976688
時間:
2017-10-21 18:48
回復
11#
jackyq
j大:您好!謝謝您的指導。可是改為line1,結果也是一樣^^"
作者:
ziv976688
時間:
2017-10-21 18:55
本帖最後由 ziv976688 於 2017-10-21 19:10 編輯
回復
12#
naruto018
'機率表...........
Else
GoTo 101
Sheets.Add
ActiveSheet.Name = "機率表"
Sheets(1).Cells.RowHeight = 20 '列高
ActiveWindow.Zoom = 75 '縮放
Sheets(1).Range("B2").Select
ActiveWindow.FreezePanes = True
With Sheets(1).[A1:F50]
.HorizontalAlignment = xlCenter
.Font.FontStyle = "粗體"
.Font.Size = 14
End With
Sheets(1).[A1:F50].Font.Name = "Arial"
Sheets(1).[a1] = "推測數字"
Sheets(1).[A1:A50].Font.ColorIndex = 7
Sheets(1).[A1:A50].NumberFormatLocal = "00"
Sheets(1).[B1] = "次數"
Sheets(1).[B1:B50].Font.ColorIndex = 11
Sheets(1).[C1] = "中獎數字"
Sheets(1).[C1:C8].Font.ColorIndex = 3
Sheets(1).[C1:C8].NumberFormatLocal = "00"
Sheets(1).[D1] = "中獎機率"
Sheets(1).[D2] = "=Count(C2:C8)/Count(A2:A50)"
Sheets(1).[D1:D2].Font.ColorIndex = 3
Sheets(1).[D2].NumberFormatLocal = "0.0%"
Sheets(1).Range("D2").Borders.LineStyle = xlContinuous
n = 1: m = 1: o = 1
For i = 1 To 49
If Msrr(i) > 0 Then
n = n + 1
Sheets(1).Cells(n, "A") = i
Sheets(1).Cells(n, "B") = Msrr(i)
If Urr(i) > 0 Then Sheets(1).Cells(n, "A").Interior.ColorIndex = 4
End If
If Urr(i) > 0 Then
m = m + 1
Sheets(1).Cells(m, "C") = i
End If
Next
If Sheets(2).Range("H" & In2rr(numh) + 6) <> "" Then
'For Each a In Sheets(1).Range("C2:C8")
If a = "" Then Exit For
If Application.CountIf(Sheets(2).Range("H" & In2rr(numh) + 6), a) Then: a.Interior.ColorIndex = 8
'Next
End If
With Sheets(1).Range("C1:C" & m)
.Borders.LineStyle = xlContinuous
End With
With Sheets(1).Range("A1:B" & n)
.Borders.LineStyle = xlContinuous
End With
With Sheets(1) '雙排序
.Columns("A:B").Sort Key1:=.[B2], Order1:=xlDescending, Key2:=.[a2], Order2:=xlAscending, Header:=xlGuess
End With
Sheets(1).Columns("A:E").EntireColumn.AutoFit '自動欄寬
Erase Msrr, Urr '清除機率表記錄
Sheets("機率表").Move
ActiveWorkbook.SaveAs mypath1 & "\49AC機_" & Numberx & "_" & Inlog(LOGN - 1) & "_" & In2rr(numh) & "-" & In1rr(N1 - 1) & ".xls"
ActiveWindow.Close
'.......................................................................
101:
複製代碼
n大:您好!謝謝您的再次指導。目前小弟以
TEST(1021)
的測試狀況是:
在Else(列208)下方插入
GoTo 101(列209)
,在
列271
插入
101:
測試=>會
停在
列249
For Each a In Sheets(1).Range("C2:C8")
表示
列210~列268
的程式碼
還是有被執行
。
將
列249和列252
Next 點綠
不執行
=>就OK的
但
事實上
列210~列268的程式碼
還是有
被執行
。
PS:
代碼列
2
=範例檔列
208
;代碼列
65
=範例檔列
279
範例檔:
[attach]27838[/attach]
作者:
naruto018
時間:
2017-10-21 20:32
回復
14#
ziv976688
1.你覺得goto沒被使用的原因是因為跳出錯誤顯示位置程式碼要跳過的地方
其實程式碼是有被跳過的,但因為程式也檢查是否有錯誤
2.你錯誤地方
因為你這個迴圈變數跟你上一層迴圈的變數一樣
For Each a In Sheets(1).Range("C2:C8")
If a = "" Then Exit For
'-------改成下面
For Each a1 In Sheets(1).Range("C2:C8")
If a1 = "" Then Exit For
複製代碼
作者:
ziv976688
時間:
2017-10-22 00:06
本帖最後由 ziv976688 於 2017-10-22 00:18 編輯
回復
15#
naruto018
n大:您好!
小弟知道~但還是謝謝您的提醒^^
可能大家都
誤解
小弟這個提問的
主軸
了!?
我的問題重點是在
GoTo的用法
:
是
不是
在程式碼的
任意處
插入
GoTo 101[
/b]
............
101:
,
則
.............
的程式碼就
會跳過
不執行
!?
如果
是
的話,那
...........
的內容就
不應該
會影響執行
的過程才對;
如果
不是
的話,那就表示
GoTo的用法
有限制或規範,EX:
GoTo
不是
在程式碼的
任意處
插入即可。
所以~小弟本題的
需求
是想藉由各位高手的
正確
和
不對
之實例(不一定是要以小弟貼上的範例)指導,學習
GoTo的正確用法
^^
作者:
naruto018
時間:
2017-10-22 08:51
回復
16#
ziv976688
下面舉個範例:
text1只會跳出1和3的視窗,不會出現2
text2中加入有錯誤的地方,1的視窗出現,2還是被跳過,程式會出現要被跳過的部分中有錯誤
Public Sub text1()
MsgBox "1"
GoTo 101
MsgBox "2"
101:
MsgBox "3"
End Sub
Public Sub text2()
MsgBox "1"
GoTo 101
MsgBox "2"
AAA = Max(Range("A1:A3")) '<---------故意在程式碼中寫錯
101:
MsgBox "3"
End Sub
複製代碼
作者:
ziv976688
時間:
2017-10-22 11:00
本帖最後由 ziv976688 於 2017-10-22 11:01 編輯
回復
17#
naruto018
以您的範例(或是我爬文時所見到的幾個範例)來說:似乎是
GoTo
在
任意處
插入即可!
但為何在我的範例中,卻必須將欲跳過
不執行
的程式碼中之錯誤修正後,才能正常執行程式碼?
這樣豈不是代表我插入的
GoTo
並沒有起作用(
失效
)!
問題重點:我插入的
GoTo
無效
的原因為何?
謝謝您^^
作者:
jcchiang
時間:
2017-10-23 08:18
回復
18#
ziv976688
程式內容錯誤,在程式執行開始時都會有警訊,與Goto指令無關
所以必需要修正正確才能繼續程式的執行
作者:
ziv976688
時間:
2017-10-23 08:43
回復
19#
jcchiang
j大:早安!
原來如此!怪不得改用
Stop
指令在錯誤碼之前測試,結果也是一樣,要先修正錯誤碼,才能停止執行程式。
瞭解了!謝謝您^^
作者:
5871224
時間:
2017-10-27 15:52
你好像是打 GOTO L01 而非101
另 GOTO 101 以及101:
最前面的'要拿掉,不然會被當成註解
作者:
pongo101
時間:
2017-10-30 15:10
我個人的作法是整段先加上註解符號,要執行時才取消註解符號 ,僅供參考!!!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)