![](/img/trans.png)
[英]Why does a VBA macro that opens another workbook not work when callend from dot.net
[英]VBA Workbook.close function: Cannot make this work within required location
我有以下代碼:
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 )<-該文件變量的格式與測試塊中的代碼相同
任何幫助將非常感激,
謝謝。
這是解決方案:
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
我所做的就是用With
,以幫助明確說明,其中被使用的范圍。 這可能會有所幫助,但如果沒有,請告訴我。
似乎您在打開事件和/或工作表激活事件中正在運行事件代碼,因此可以使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.