Board logo

標題: [發問] 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後面試試看
  1. if....
  2. ....
  3. '機率表.....
  4. GoTo line1   '---->移去後面
  5. Else
  6. '<-----移到這個位置
  7. ....
  8. line1:
  9. 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是下面這一行嗎?因為我執行時發生,錯誤不是出現在這一行
  1. 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
  1.   '機率表...........
  2.                 Else
  3. GoTo 101
  4.                     Sheets.Add
  5.                     ActiveSheet.Name = "機率表"
  6.                     Sheets(1).Cells.RowHeight = 20 '列高
  7.                     ActiveWindow.Zoom = 75 '縮放
  8.                     Sheets(1).Range("B2").Select
  9.                     ActiveWindow.FreezePanes = True
  10.                     With Sheets(1).[A1:F50]
  11.                         .HorizontalAlignment = xlCenter
  12.                         .Font.FontStyle = "粗體"
  13.                         .Font.Size = 14
  14.                     End With
  15.                     Sheets(1).[A1:F50].Font.Name = "Arial"
  16.                     Sheets(1).[a1] = "推測數字"
  17.                     Sheets(1).[A1:A50].Font.ColorIndex = 7
  18.                     Sheets(1).[A1:A50].NumberFormatLocal = "00"
  19.                     Sheets(1).[B1] = "次數"
  20.                     Sheets(1).[B1:B50].Font.ColorIndex = 11
  21.                     Sheets(1).[C1] = "中獎數字"
  22.                     Sheets(1).[C1:C8].Font.ColorIndex = 3
  23.                     Sheets(1).[C1:C8].NumberFormatLocal = "00"
  24.                     Sheets(1).[D1] = "中獎機率"
  25.                     Sheets(1).[D2] = "=Count(C2:C8)/Count(A2:A50)"
  26.                     Sheets(1).[D1:D2].Font.ColorIndex = 3
  27.                     Sheets(1).[D2].NumberFormatLocal = "0.0%"
  28.                     Sheets(1).Range("D2").Borders.LineStyle = xlContinuous
  29.                     n = 1: m = 1: o = 1
  30.                     For i = 1 To 49
  31.                         If Msrr(i) > 0 Then
  32.                             n = n + 1
  33.                             Sheets(1).Cells(n, "A") = i
  34.                             Sheets(1).Cells(n, "B") = Msrr(i)
  35.                             If Urr(i) > 0 Then Sheets(1).Cells(n, "A").Interior.ColorIndex = 4
  36.                         End If
  37.                         If Urr(i) > 0 Then
  38.                             m = m + 1
  39.                             Sheets(1).Cells(m, "C") = i
  40.                         End If
  41.                     Next
  42.                         If Sheets(2).Range("H" & In2rr(numh) + 6) <> "" Then
  43.                         'For Each a In Sheets(1).Range("C2:C8")
  44.                         If a = "" Then Exit For
  45.                         If Application.CountIf(Sheets(2).Range("H" & In2rr(numh) + 6), a) Then: a.Interior.ColorIndex = 8
  46.                         'Next
  47.                         End If
  48.                     With Sheets(1).Range("C1:C" & m)
  49.                         .Borders.LineStyle = xlContinuous
  50.                     End With
  51.                     With Sheets(1).Range("A1:B" & n)
  52.                         .Borders.LineStyle = xlContinuous
  53.                     End With
  54.                     With Sheets(1)  '雙排序
  55.                          .Columns("A:B").Sort Key1:=.[B2], Order1:=xlDescending, Key2:=.[a2], Order2:=xlAscending, Header:=xlGuess
  56.                     End With
  57.                     
  58.                     Sheets(1).Columns("A:E").EntireColumn.AutoFit  '自動欄寬
  59.                     Erase Msrr, Urr '清除機率表記錄
  60.                     Sheets("機率表").Move
  61.                     ActiveWorkbook.SaveAs mypath1 & "\49AC機_" & Numberx & "_" & Inlog(LOGN - 1) & "_" & In2rr(numh) & "-" & In1rr(N1 - 1) & ".xls"
  62.                     ActiveWindow.Close
  63. '.......................................................................
  64.             
  65. 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.你錯誤地方
因為你這個迴圈變數跟你上一層迴圈的變數一樣
  1. For Each a In Sheets(1).Range("C2:C8")
  2.   If a = "" Then Exit For
  3. '-------改成下面
  4. For Each a1 In Sheets(1).Range("C2:C8")
  5.   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還是被跳過,程式會出現要被跳過的部分中有錯誤
  1. Public Sub text1()
  2. MsgBox "1"
  3. GoTo 101
  4. MsgBox "2"
  5. 101:
  6. MsgBox "3"
  7. End Sub

  8. Public Sub text2()
  9. MsgBox "1"
  10. GoTo 101
  11. MsgBox "2"
  12. AAA = Max(Range("A1:A3")) '<---------故意在程式碼中寫錯

  13. 101:
  14. MsgBox "3"
  15. 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/)