簡體   English   中英

VBA Workbook.close函數:無法在所需位置進行此工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM