为什么有时Excel会产生“不正确”的错误信息?

拿下面的代码; 我错过了一个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 

我也看到这种行为与其他错误也没有正确沟通的问题。 为什么是这样?

错误是不正确的。 从解释者的angular度来看,遇到的第一个问题是你在With块中有Next ,这当然是错误的。

编译器和解释器(可能是clang C编译器除外)不能猜测两个可能的错误中哪一个是你“意思”的错误。

您收到的错误消息是正确的。 “Next without For”是错误消息,因为您的代码正在尝试终止For代码块,同时仍执行With代码块。 NextEnd With都是终止语句,嵌套块必须以正确的顺序终止。

一个更简单的英语读取错误消息将是,“你正试图终止一个代码块,但你目前在一个代码块的某种types以外的所以我不知道该怎么办“。 恰巧你在一个With块中,但是编译器不够聪明,不能在错误信息中包含这些信息。 所以,错误信息是正确的,但它肯定可以改善。

我误解了例子中代码错误的故意性质。 这里是一个无错的版本供参考:

 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 End With Next End Sub 

你的问题是有效的。 但是,这是VB编译器/交互器的工作原理。
用下面的代码,它抛出

编译错误:结束而不使用

 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