自动化错误添加filter

我试图添加一个自动过滤到Excel文件中的工作表:

'---- SLIDE THREE ---- Sub SlideTangerine3() 'reportWeek As String) 'Declare variables Dim pre As Presentation Dim slide As slide Dim textbox As Shape Dim book As Workbook Dim sheet As Worksheet Dim switch As String 'Set variables Set pre = ActivePresentation Set slide = pre.Slides(3) '----------------------------------------------------- Set book = Workbooks.Open("C:\Users\User\Desktop\Book1.xlsx") Set sheet = book.Worksheets(3) If Not sheet.AutoFilterMode Then sheet.Range("A1").AutoFilter End If book.Close End Sub 

我点击运行,vba编辑器冻结

结束过程后,我收到消息“自动化错误远程过程调用失败”

从上面的评论,我注意到,你正在做book.close没有book.save 。 这将引发一个对话框,要求您保存或放弃对工作簿的更改。 应用AutoFilter – 即使没有任何条件 – 是一个“改变”。

因为Excel应用程序是不可见的,所以你看不到这个对话框,它被困在一个无限的等待你回应(但你不能回应,因为你看不到!)。 我认为这些方法都可以解决您的问题。

选项1使工作簿可见。 这将允许显示对话框,然后您可以select保存或放弃更改。

 Sub SlideTangerine3() 'reportWeek As String) 'Declare variables Dim pre As Presentation Dim slide As slide Dim textbox As Shape Dim book As Workbook Dim sheet As Worksheet Dim switch As String 'Set variables Set pre = ActivePresentation Set slide = pre.Slides(3) '----------------------------------------------------- Set book = Workbooks.Open("C:\Users\User\Desktop\Book1.xlsx") book.Application.Visible = True Set sheet = book.Worksheets(3) If Not sheet.AutoFilterMode Then sheet.Range("A1").AutoFilter End If book.Close End Sub 

选项2显式保存(或不保存)文件,这将完全避免对话框:

 Sub SlideTangerine3() 'reportWeek As String) 'Declare variables Dim pre As Presentation Dim slide As slide Dim textbox As Shape Dim book As Workbook Dim sheet As Worksheet Dim switch As String 'Set variables Set pre = ActivePresentation Set slide = pre.Slides(3) '----------------------------------------------------- Set book = Workbooks.Open("C:\Users\User\Desktop\Book1.xlsx") Set sheet = book.Worksheets(3) If Not sheet.AutoFilterMode Then sheet.Range("A1").AutoFilter End If book.Close True '### OR to discard changes, use this: 'book.Close False End Sub