【问题标题】:Why this VBA code has a compile error: Expected End Sub?为什么这个 VBA 代码有一个编译错误:Expected End Sub?
【发布时间】:2023-04-04 14:37:01
【问题描述】:
Sub work()
    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Target = Target * 1000
    Application.EnableEvents = True
End Sub

我找到了一种不使用excel来解决这个问题的方法。我用 R 来解决这个问题。只是一个提示,如果您有很多数据,请不要使用 excel。这是致命的缓慢和复杂。任何人都可以以更简单的方式使用 R 或 Python。

【问题讨论】:

    标签: excel vba macros


    【解决方案1】:

    您必须使用 1 个结束子进行子。子工作()和私人子......

    Sub work() 
    
    Private Sub Worksheet_Change(ByVal Target As Range) 
    
    Application.EnableEvents = False Target = Target * 1000 Application.EnableEvents = True 
    
    End Sub
    

    【讨论】:

    • 什么?我不明白。您是说“Sub work()”和“Private Sub”需要两个“End Sub”吗?我试过了,但它不起作用。
    • 是的,您不能有嵌套的子例程。如果您取出 sub work(),它应该可以工作或取出 Private Sub Worksheet_Change(ByVal Target As Range)
    • 注释掉你的代码并把它放进去, Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "hello alex" End Sub 开始输入单元格,你会看到代码有效。如果你想创建自己的例程,插入一个模块并在那里执行,如果你想在更改事件中引用你的模块,你可以从那里调用它....
    • 我放 Sub work() 的原因是 VBA 一直要求我为任何东西创建子宏名称。而且我尝试了很多方法来激活代码但没有工作。如果我取出 Private Sub Worksheet_Change(ByVal Target As Range),则代码无法正常工作。
    【解决方案2】:

    我不相信 VBA 允许嵌套子例程或函数(尽管我认为 VB “适当”可以做到这一点)。

    您的问题是您正在启动第二个子例程,而第一个子例程仍处于“活动状态”,这就是它抱怨的原因。

    假设两个子例程都需要,最简单的解决方案可能只是将您的子例程分开而不是尝试嵌套它们。

    但是,由于从您的代码 sn-p 中并不清楚为什么您需要 work(),因此 可能您可以简单地删除该行并只使用 Worksheet_Change() 子例程,类似:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False
        Target = Target * 1000
        Application.EnableEvents = True
    End Sub
    

    如果您确实需要一个基本上做同样事情的单独函数,请(单独)编写它以便调用该函数,或者将代码的主要内容放入一个单独的 被work() Worksheet_Change()调用的子程序。

    【讨论】:

    • 当我尝试该代码时,Visual Basic 要求我创建一个宏名称。它会创建编译错误为 Fxxxx 无限循环。
    • @Alex,这是一个与嵌套子程序问题完全不同的问题。这里公认的做法是尝试保持问题相对有针对性。换句话说,如果最初的问题解决了,就为其他问题提出一个新的问题。否则,SO 将成为讨论板,而不是问答资源——这绝不是它的意图。
    猜你喜欢
    • 2015-10-30
    • 1970-01-01
    • 2012-02-08
    • 2020-11-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多