首页 > 解决方案 > 为什么我的 GoTo 功能无法正常工作

问题描述

我的 GoTo 不是跳到 Reve: 上,而是跳到 Gen: 上。我不知道为什么它不起作用。问题是当我在单元格 C22 中输入 41010020 时,它只会清除在 Reve: 中调用的单元格。它不会继续 Reve:。我认为我的代码中的逻辑是正确的,但我不知道为什么它不起作用。

Sub ValidateCode2()
Dim sto As String, cod As String, rev As String, cog As String, dis As String, brandlist As String, prodlist As String
Dim codres As String, revres As String, cogres As String, disres As String, stores As String
Dim brandresult As String, prodresult As String
Dim i As Long, x As Long
Dim wb As Workbook: Set wb = ThisWorkbook


sto = wb.Worksheets("Item Groups form").Range("C26").Value
cog = wb.Worksheets("Item Groups form").Range("F22").Value
rev = wb.Worksheets("Item Groups form").Range("C22").Value
dis = wb.Worksheets("Item Groups form").Range("F23").Value
cod = wb.Worksheets("Item Groups form").Range("C18").Value
brandlist = wb.Worksheets("Item Groups form").Range("C19").Value
prodlist = wb.Worksheets("Item Groups form").Range("D19").Value


If wb.Worksheets("Item Groups form").Range("C22").Value = 41010020 Then GoTo Reve Else


For i = 2 To 13
    If sto = wb.Worksheets("Validation").Range("B" & i).Value Then codres = wb.Worksheets("Validation").Range("D" & i).Value
Next

For i = 2 To 13
    If sto = wb.Worksheets("Validation").Range("B" & i).Value Then revres = wb.Worksheets("Validation").Range("E" & i).Value
Next

For i = 2 To 13
    If sto = wb.Worksheets("Validation").Range("B" & i).Value Then cogres = wb.Worksheets("Validation").Range("F" & i).Value
Next

For i = 2 To 13
    If sto = wb.Worksheets("Validation").Range("B" & i).Value Then disres = wb.Worksheets("Validation").Range("G" & i).Value
Next

'Brand
For i = 2 To 5000
    If brandlist = wb.Worksheets("Validation").Range("P" & i).Value Then brandresult = wb.Worksheets("Validation").Range("Q" & i).Value
Next

'Product
For i = 2 To 32
    If prodlist = wb.Worksheets("Validation").Range("U" & i).Value Then prodresult = wb.Worksheets("Validation").Range("V" & i).Value
Next
GoTo Gen

Reve:
'Brand
For i = 2 To 5000
    If brandlist = wb.Worksheets("Validation").Range("P" & i).Value Then brandresult = wb.Worksheets("Validation").Range("Q" & i).Value
Next

'Product
For i = 2 To 32
    If prodlist = wb.Worksheets("Validation").Range("U" & i).Value Then prodresult = wb.Worksheets("Validation").Range("V" & i).Value
Next
wb.Worksheets("Item Groups form").Range("C18").Value = wb.Worksheets("Validation").Range("D3").Value + prodresult + brandresult
wb.Worksheets("Item Groups form").Range("C22").Value = wb.Worksheets("Validation").Range("E3").Value
wb.Worksheets("Item Groups form").Range("F22").Value = wb.Worksheets("Validation").Range("F3").Value
wb.Worksheets("Item Groups form").Range("F23").Value = wb.Worksheets("Validation").Range("G3").Value
wb.Worksheets("Item Groups form").Range("C26").Value = wb.Worksheets("Validation").Range("B3").Value

Gen:
wb.Worksheets("Item Groups form").Range("C18").Value = codres + prodresult + brandresult
wb.Worksheets("Item Groups form").Range("C22").Value = revres
wb.Worksheets("Item Groups form").Range("F22").Value = cogres
wb.Worksheets("Item Groups form").Range("F23").Value = disres

End Sub

标签: excelvba

解决方案


我建议你看看 BigBen 对意大利面条代码的评论,因为有了这种结构,它很快就会变得令人毛骨悚然......

我认为您遇到的问题可以追溯到 IF THEN 结构。

您需要像这样在几行中重写它:

If wb.Worksheets("Item Groups form").Range("C22").Value = 41010020 Then
    GoTo Reve
Else
...
End if

否则它会产生一个错误代码......你得到一个错误代码吗?


推荐阅读