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

时间:2012-09-27 14:45:39

标签: excel excel-vba compiler-errors vba

采取以下代码;我错过了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

我已经在其他错误中看到了这种行为,但问题没有得到正确传达。这是为什么?

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:4)

您收到的错误消息是正确的。 “Next without For”是错误消息,因为您的代码在执行For代码块时尝试终止With代码块。 NextEnd 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