【问题标题】:Vba Goto won't work properlyVba Goto 无法正常工作
【发布时间】:2017-10-09 09:53:13
【问题描述】:

大家好,我一直在玩“If”“Then”“And”和“Goto”

我想我除了“Goto”之外的所有东西我都掌握了很多次我无法让它工作 我不确定是因为我使用了“If”错误还是因为我使用了“Goto”错误。有人可以看看这段代码,告诉我我做错了什么。因为我经常使用“If”语句,所以如果我以最好和正确的方式使用它会很好。是的,我在下面的代码中知道我使用了活动表,我应该在不使用活动表的情况下执行代码,因为这里的统计数据中有很多人,但我还不确定如何使用

Columns(1).Insert Shift:=xlRight

尚未激活工作表

所以这是我的单元格 A1 的代码,其值为“new”,因此应该激活 Goto,但它没有。

Sub con()
Set tsheet = ThisWorkbook.Sheets("Players")
Sheets("Players").Activate
ActiveSheet.Columns(1).Insert Shift:=xlRight
Dim lngLastRow As Long
If tsheet.Range("A1") = "new" Then
GoTo AlR
Else
    lngLastRow = Cells(Rows.Count, "B").End(xlUp).Row
    Range("A2").Formula = "=B2 & "" "" & C2 & "" "" & G2 & "" "" & D2"
    Range("A2").Copy Range("A2:A" & lngLastRow)
    tsheet.Range("A1").Value = "new"
End If
AlR:
MsgBox "Column is already present"
End Sub

【问题讨论】:

  • 这是因为您在同一行中使用了GoTo。将 GoTo 放在下一行,将代码块放在 If 中的 Else 部分。
  • 只要去掉 End If

标签: excel vba if-statement goto


【解决方案1】:

让自己和未来受益:不要将 GOTO 用于错误处理以外的任何事情。

你现在做的事情叫Spaghetti code

你的代码应该是:

Sub con()
Set tsheet = ThisWorkbook.Sheets("Players")
Sheets("Players").Activate
ActiveSheet.Columns(1).Insert Shift:=xlRight
Dim lngLastRow As Long
If tsheet.Range("A1") = "new" Then 
    MsgBox "Column is already present"
else
    lngLastRow = Cells(Rows.Count, "B").End(xlUp).Row
    Range("A2").Formula = "=B2 & "" "" & C2 & "" "" & G2 & "" "" & D2"
    Range("A2").Copy Range("A2:A" & lngLastRow)
    tsheet.Range("A1").Value = "new"
End If

End Sub

【讨论】:

  • 我同意 GoTo 应该被认为是有害的 (en.wikipedia.org/wiki/Considered_harmful),但您可以提到它是 VBA 中错误处理所必需的。
  • 感谢您的回答,非常感谢!
  • 感谢 Noceo 的链接
  • @noceo 自从您发布此评论以来,我根本没有编辑我的答案。请你再读一遍好吗?因为“错误处理”异常已经存在。
  • 有趣的是它仍然没有读取单元格 A1 中的新内容(我刚刚在单元格中写了新内容,所以它应该可以正常工作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2015-06-28
  • 2018-07-18
  • 1970-01-01
  • 2011-06-03
相关资源
最近更新 更多