为什么有时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
代码块。 Next
和End 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
。