我有这段代码:
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”,并对其进行修改,并出现完全相同的错误消息。
我还确认了Set wbb = Workbooks.Open( file )< - 文件变量的格式与测试块中的代码相同
非常感谢任何帮助,
谢谢。
答案 0 :(得分:1)
这是解决方案:
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
答案 1 :(得分:0)
这可能无法解决问题,但我认为问题的一部分是多个工作簿,而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
我所做的是使用With
来帮助明确说明正在使用的范围。这可能有所帮助,但如果没有,请告诉我。
答案 2 :(得分:0)
您似乎在开放事件和/或工作表激活事件中运行了事件代码,因此您可以使用EnableEvents
禁用该事件代码。还有很多不必要的选择:
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