VBA Workbook.closefunction:不能使此工作在所需的位置

我有这个代码:

Sub test() Dim wb As String Dim wbb As Workbook wb = "C:\xyz.xlsx" Set wbb = Workbooks.Open(wb) MsgBox ("testing") wbb.Close End Sub 

上面的工作就好了 。 工作簿按预期结束

但是,这个代码似乎不工作。 但对我来说,它看起来 workbooks.close函数相同 。 有人可以请告知为什么这会引发错误“运行时错误'1004': 应用程序定义的或对象定义的错误

 Sub filesTest(folder, dex) Dim wb As String Dim wbb As Workbook Dim dat Dim dat2 Dim dat3 Dim dat4 wb = "xyz.xlsm" For Each file In folder.Files If file.Name Like "*.xlsm" Then If InStr(file.Name, "~$") = 0 Then 'sendFile (file.Name) Set wbb = Workbooks.Open(file) Worksheets("Sheet 1").Select dat = Range("F11") Worksheets("Sheet 2").Select dat2 = Range("C54") dat3 = Range("D54") dat4 = Range("E54") wbb.Close Workbooks(wb).Activate Range("B" & dex) = dat Range("C" & dex) = dat2 Range("D" & dex) = dat3 Range("E" & dex) = dat4 End If End If Next End Sub 

我试图移动wbb.close的位置,但这似乎没有任何帮助。

我也试图使用替代的“Activeworkbook.close false”,并在此出现完全相同的错误消息的变化。

我也确认设置wbb = Workbooks.Open( 文件 )< – 文件variables具有与testing块中的代码相同的格式

任何帮助将非常感激,

谢谢。

这是解决scheme:

 Sub filesTest(folder, dex) Dim wb As String Dim wbb As Workbook Dim dat Dim dat2 Dim dat3 Dim dat4 wb = "xyz.xlsm" For Each file In folder.Files If file.Name Like "*.xlsm" Then If InStr(file.Name, "~$") = 0 Then 'sendFile (file.Name) application.enableevents = false Set wbb = Workbooks.Open(file) Worksheets("Sheet 1").Select dat = Range("F11") Worksheets("Sheet 2").Select dat2 = Range("C54") dat3 = Range("D54") dat4 = Range("E54") wbb.Close application.enableevents = true Workbooks(wb).Activate Range("B" & dex) = dat Range("C" & dex) = dat2 Range("D" & dex) = dat3 Range("E" & dex) = dat4 End If End If Next End Sub 

这可能无法解决问题,但我认为问题的一部分是多个工作簿,没有明确的引用在您的Range 。 这是值得指出的,太长的评论。

尝试使用以下内容:

 Sub filesTest(folder, dex) Dim wb As String Dim wbb As Workbook Dim dat, dat2, dat3, dat4 wb = "xyz.xlsm" For Each file In folder.Files If file.Name Like "*.xlsm" Then If InStr(file.Name, "~$") = 0 Then 'sendFile (file.Name) Set wbb = Workbooks.Open(file) With wbb dat = .Worksheets("Sheet 1").Range("F11") dat2 = .Worksheets("Sheet 2").Range("C54") dat3 = .Worksheets("Sheet 2").Range("D54") dat4 = .Worksheets("Sheet 2").Range("E54") .Close End With With Workbooks(wb) .Range("B" & dex) = dat .Range("C" & dex) = dat2 .Range("D" & dex) = dat3 .Range("E" & dex) = dat4 End With End If End If Next End Sub 

我所做的是用来帮助明确说明在哪里使用的范围。 这可能有帮助,但如果没有,让我知道。

看起来您有事件代码在打开的事件和/或表单激活事件中运行,因此您可以使用EnableEvents禁用该EnableEvents 。 还有很多不必要的select:

 Sub filesTest(folder, dex) Dim wb As String Dim wbb As Workbook Dim dat Dim dat2 Dim dat3 Dim dat4 On Error Goto clean_up wb = "xyz.xlsm" Application.Enableevents = False For Each file In folder.Files If file.Name Like "*.xlsm" Then If InStr(file.Name, "~$") = 0 Then 'sendFile (file.Name) Set wbb = Workbooks.Open(file) dat = wbb.Worksheets("Sheet 1").Range("F11").Value With wbb.Worksheets("Sheet 2") dat2 = .Range("C54").Value dat3 = .Range("D54").Value dat4 = .Range("E54").Value End With wbb.Close Workbooks(wb).Activate Range("B" & dex) = dat Range("C" & dex) = dat2 Range("D" & dex) = dat3 Range("E" & dex) = dat4 End If End If Next clean_up: Application.Enableevents = True End Sub