【发布时间】:2018-02-18 21:22:43
【问题描述】:
我有 3 个工作表。前两个让我转换成两个数组(array1 和array2),然后在它们之间进行计算以创建第三个。
我创建的宏利用了这段代码---
Z = 1
For x = 1 To UBound(array1, 1)
For y = 1 To UBound(array2, 1)
If array1(x, 4) = 0 Then
GoTo Line1
End If
If array1(x, 1) = array2(y, 1) And array1(x, 2) = array2(y, 3)Then
If array1(x, 4) > array2(y, 5) Then
array3(z, 1) = array1(x, 3)
ElseIf array1(x, 4) = array2(y, 5) Or array1(x, 4) < array2(y, 5) Then
array3(z, 1) = array1(x, 3)
End If
z = z + 1
End If
Next y
Line1:
Next x
它需要一段array1 并通过array2 循环它并在array3 中创建一个结果
基本上当array1(x, 4) = 0 时,我需要它转到下一个X。如果没有GoTo Line1,我无法弄清楚如何循环这个。
如果我将它向下移动,那么它将继续循环通过array2(y),而不是移动到下一个X。如果我将它移到上面,那么 y 会重置并再次运行 For y 循环
还在使用GoTo Line X,这是 VBA 中的不良做法。我是否应该总是尽量避免使用它。我对它还很陌生。
【问题讨论】:
-
goto 可能很有用,但它也非常强大,所以最好先确保您理解所有内容,然后再将其粘贴到代码中。但在您的情况下,您可能需要使用它
-
请正确缩进您的代码并删除空行。 Goto 通常不需要(
On Error Goto ...语句除外)。在常规代码中避免它。 -
@Tomalak 这个代码有必要吗?我不确定另一种格式化方式
-
测试相反的情况并删除 go-to 并将代码放在 if 中。
-
@UserX 正如我所说,
GoTo从来都不是必需的。使用它会增加代码中出现错误的可能性,并增加头痛的可能性。