采取以下代码;我错过了End With
但是在编译时错误是:Next without For
这是错误的。
Option Explicit
Public Sub Payments()
Dim ws As Worksheet
'--> Format the original workbook
For Each ws In ThisWorkbook.Worksheets
With ws
.UsedRange.EntireColumn.Hidden = False
Next
End Sub
我已经在其他错误中看到了这种行为,但问题没有得到正确传达。这是为什么?
答案 0 :(得分:8)
错误不正确。从解释者的角度来看,遇到的第一个问题是Next
块内有With
,这当然是错误的。
编译器和解释器(可能除了clang C编译器之外)不擅长猜测两个可能的错误中哪一个是你“意味着”的错误。
答案 1 :(得分:4)
您收到的错误消息是正确的。 “Next without For”是错误消息,因为您的代码在执行For
代码块时尝试终止With
代码块。 Next
和End With
都是终止语句,嵌套块必须以正确的顺序终止。
错误消息的更简单英语读取是“您正在尝试终止For
代码块,但您当前处于{{1}以外的某种类型的代码块中所以我不知道该怎么办。“碰巧你在For
块中,但编译器不够聪明,不能在错误消息中包含该信息。所以,错误信息是正确的,但肯定可以改进。
我误解了示例中代码错误的故意性质。这是一个无错误的版本供参考:
With
答案 2 :(得分:1)
您的问题有效。但是,这就是VB编译器/ intererpter的工作原理 使用以下代码,它会抛出
编译错误:结束时不带
Public Sub Payments()
Dim ws As Worksheet
'--> Format the original workbook
With ws
.UsedRange.EntireColumn.Hidden = False
For Each ws In ThisWorkbook.Worksheets
End With
End Sub
它看起来像是先出后退(即找到End With
,但前一个元素不是With
。