【问题标题】:My VBA IF statement is generation a compile error我的 VBA IF 语句生成编译错误
【发布时间】:2021-09-22 10:15:07
【问题描述】:

我的代码有问题,我似乎找不到它,所以我需要另一双眼睛,我想我要 VBA 盲目了。

这是我的代码非常简单,如果有人正在执行更高级别,则 3 列显示为灰色并且不适用,因为他们不会为列 D、F 和 G 中的这些模块获得任何结果。如果没有执行更高级别水平,那么这将是一个反转,他们不会得到 B、C 和 E 列中模块的结果。有 28 名学员,所以它需要为所有行工作。

目前的代码如下:

Private Sub Update()
    Dim Course As String
    Dataset = Range("A").Value

    If Course = "Higher" Then
        Range("D").Value = "N/A"
        Range("F").Value = "N/A"
        Range("G").Value = "N/A"
        Range("D,F,G").Select

        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = -0.249977111117893
            .PatternTintAndShade = 0
    Else
            Range("B").Value = "N/A"
            Range("C").Value = "N/A"
            Range("E").Value = "N/A"
            Range("B,C,E").Select

            With Selection.Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .ThemeColor = xlThemeColorDark1
                .TintAndShade = -0.249977111117893
                .PatternTintAndShade = 0
    End If
            End With

End Sub

但是,我收到一个编译错误,提示“Else without and If”。据我所知,所有变量都已声明,IF 语句的结构正确。

有什么想法吗?

【问题讨论】:

  • 你能看到它已经相应缩进了吗?
  • 因为缩进不连贯而被问了这么多问题让我吃惊...
  • WithIF .. ThenElse 之间开始,在End If 之后结束

标签: excel vba if-statement


【解决方案1】:

试试这个:

Private Sub Update()
    Dim Course As String
    Dataset = Range("A").Value

    If Course = "Higher" Then
        Range("D").Value = "N/A"
        Range("F").Value = "N/A"
        Range("G").Value = "N/A"
        Range("D,F,G").Select

        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = -0.249977111117893
            .PatternTintAndShade = 0
        End With
    Else
            Range("B").Value = "N/A"
            Range("C").Value = "N/A"
            Range("E").Value = "N/A"
            Range("B,C,E").Select

            With Selection.Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .ThemeColor = xlThemeColorDark1
                .TintAndShade = -0.249977111117893
                .PatternTintAndShade = 0
            End With
    End If

End Sub

如果归结为:

If ... Then
  ...
  With ...     'Start the first With-clause
    ...
  End With     'End the first With-clause
Else           'All With-clauses need to be closed before you can go here
  ...
  With ...     'Start the second With-clause
    ...
  End With     'End the second With-clause
End If         'All With-clauses needed be closed before you can go here.

【讨论】:

  • 虽然在技术上是有效的,但这是一个糟糕的解决方案。它错过了withs 的内容是相同的,有no need to select 并且其他操作也相同,只是适用于不同的范围。
  • @GSerg:有些东西被选中了,毕竟什么都没做。这确实是错误的,但这是我先解决编译错误的尝试。
  • ...现在使用SelectSelection 得到可接受的答案,加上不合格的范围,加上重复的代码 - 生成新新手问题的最佳方式。
【解决方案2】:

您有 2 个 With 语句,只有 1 个 End With

将您的With Selection.Interior 移动到第一个If 上方并删除第二个With

将您最后的End With 移到End If 上方。

【讨论】:

  • 确实有 2 个 With 语句,只有 1 个 End With,这不是该代码的唯一问题。两个“其中一个”中的第一个会修复它,第二个不会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2015-10-24
  • 1970-01-01
  • 2023-04-05
  • 2021-03-10
  • 2015-01-21
  • 1970-01-01
相关资源
最近更新 更多