【问题标题】:Why does the macro gives compile error without any logical or syntax error in script?为什么宏给出编译错误而脚本中没有任何逻辑或语法错误?
【发布时间】:2020-03-15 17:24:27
【问题描述】:

我在 excel vba 中编写了一个宏。我附上下面的脚本。我在宏中没有看到任何逻辑或语法错误,但是当我尝试编译它时,我得到Compile error: Expected: To

下面附上我的脚本

Sub Go()

Set ws = ActiveSheet

ws.Range("D:D").ClearContents
ws.Range("D:D").ClearFormats

ws.Cells(1, 4).Value = "Status"
ws.Cells(1, 4).Font.Bold = True

maxEntry = ActiveSheet.Cells(1048576, "A").End(xlUp).Row

pricePath = ws.Cells(2, 6).Value + "\" + ws.Cells(2, 7).Value
Set wbpp = Workbooks.Open(pricePath, UpdateLinks:=False)

ws.Activate

For i = 2 To maxEntry
    Path = ws.Cells(i, 1).Value + "\" + ws.Cells(i, 2).Value
    currSheet = ws.Cells(i, 3).Value
    Set wbp = Workbooks.Open(Path, UpdateLinks:=False)
    Set wbs = wbp.Sheets(currSheet)
    wbs.Activate
    wbs.Cells(1, 1).Value = "abc"

    wbp.Close Savechanges:=True
    ws.Activate
    ws.Cells(i, 4).Value = "Updated"
Next i

wbpp.Close Savechanges:=False

End Sub

在尝试了各种方法后,我发现当我的光标在宏子内部时宏会引发错误,类似于这样

但是当我的光标在子之外时,脚本运行良好

我不记得我以前的宏发生过这个问题。

任何想法为什么会发生这种情况?每次我想测试/编译时将光标移动到底部运行真的很烦人。

【问题讨论】:

  • 我测试了一个像Sub Go() Set ws = ActiveSheet ws.Activate End Sub 这样的小代码,它可以工作。我无法重现您的问题。我的建议是将例程名称从 Go 更改为 ProcessData 并进行测试。
  • @shrivallabha.redij 确实有效,我认为 VBA 可能有语法 Go 可能与子名称冲突,因此出现错误。将子名称更改为其他名称效果很好。谢谢

标签: excel vba compiler-errors


【解决方案1】:

Go是根据http://www.audeser.com/vba-reserved-words/的保留字

保留字的任何使用都可能产生意想不到的后果。建议将您的子名称更改为其他名称,例如@shrivallabha.redij 所述ProcessData

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多