【问题标题】:Automation error or Error 462 in excel VBA codeexcel VBA 代码中的自动化错误或错误 462
【发布时间】:2021-04-07 23:29:55
【问题描述】:

我收到错误“-2147417848 (80010108) 运行时错误,下面的代码在 Excel VBA 中使用”:

sub import()

Application.EnableEvents = False
Application.DisplayAlerts = False
Application.ScreenUpdating = False

    On Error GoTo error

    Dim App As New excel.Application 
    Dim wbImport As Workbook
    Set wbImport = App.Workbooks.Open(ThisWorkbook.Path & "\" & "example.xlsm")

       'DATA COPY
       Dim Lastrow As Integer
       Lastrow = ThisWorkbook.Worksheets("DATA").Cells(Rows.Count, 1).End(xlUp).Row
       ThisWorkbook.Worksheets("DATA").Range("A2:AM" & Lastrow).Copy
       wbImport.Worksheets("DATA").Range("a2").PasteSpecial Paste:=xlPasteValues 
       wbImport.Worksheets("CONFIG").Shapes("pdv").Visible = False


  wbImport.Close SaveChanges:=True 
  App.CutCopyMode = False 
  App.Quit 
  MsgBox "OK"

Application.DisplayAlerts = True
Application.EnableEvents = True
Application.ScreenUpdating = True
  

error:

   App.CutCopyMode = False 
   wbImport.Close SaveChanges:=True 
   App.Quit 
    
Application.DisplayAlerts = True
Application.EnableEvents = True
Application.ScreenUpdating = True

MsgBox "FAIL"

End sub

最近发现,通过添加

Set App = Nothing    

之后

 App.Quit

它给了我“错误 462”,但我不知道为什么。调试正常运行,最后在msgboxes后提示错误。

【问题讨论】:

  • 你为什么要创建一个新的应用程序?
  • @BigBen 真的不知道,重用和改编了这个网页的代码。还尝试使用 Set App = CreateObject("Excel.Application") 并获得运行时 91。
  • @BigBen 你是对的,它的优秀。我想打开文件而不显示(隐藏)
  • 您退出了应用程序。它不再存在于记忆中。如果对象不再运行,它如何以nothing 终止。将对象设置为空是巫毒编程。没有必要。
  • 删除该行。

标签: excel vba automation runtime


【解决方案1】:

我确定这不是最好的解决方案,但我找到了:

1-无需Dim App As New excel.Application在后台打开excel文件。

在打开之前和之后屏幕更新属性足以不显示过程:

Application.ScreenUpdating = False

Dim wbImport As Workbook
Set wbImport = Workbooks.Open(ThisWorkbook.Path & "\example.xlsm" 

Application.ScreenUpdating = True

2- 我忘了在“错误:”句柄之前添加Exit sub

最终代码:

    sub import()
    On Error GoTo error
    
    Application.EnableEvents = False
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
      
        Dim wbImport As Workbook
        Set wbImport = App.Workbooks.Open(ThisWorkbook.Path & "\" & "example.xlsm")
    
           'DATA COPY
           Dim Lastrow As Integer
           Lastrow = ThisWorkbook.Worksheets("DATA").Cells(Rows.Count, 1).End(xlUp).Row
           ThisWorkbook.Worksheets("DATA").Range("A2:AM" & Lastrow).Copy
           wbImport.Worksheets("DATA").Range("a2").PasteSpecial Paste:=xlPasteValues 
           wbImport.Worksheets("CONFIG").Shapes("pdv").Visible = False
    
      wbImport.Close SaveChanges:=True 
      MsgBox "OK"

Application.DisplayAlerts = True
Application.EnableEvents = True
Application.ScreenUpdating = True
  
exit sub 

error:

wbImport.Close SaveChanges:=True   
Application.DisplayAlerts = True
Application.EnableEvents = True
Application.ScreenUpdating = True

MsgBox "FAIL"

End sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 2020-03-18
    • 1970-01-01
    • 2017-11-24
    • 2014-07-18
    • 2019-03-29
    相关资源
    最近更新 更多