关于在VBA中关闭新的打开工作簿

时间:2016-05-09 04:44:50

标签: excel vba excel-vba

我创建了一个宏,允许用户将路径放在Textbox&打开文件。

但是,一旦打开文件并复制数据,我希望宏关闭新打开的工作簿。由于打开的文件总是可以更改,我需要关闭它的代码?

Option Explicit

Private Sub Cmd_1_Click()
    Dim Wbk As ThisWorkbook
    Dim Wbk1 As Workbooks
    Dim xlapp As Excel.Application

    Set xlapp = New Excel.Application
    Set Wbk = ThisWorkbook
    Set Wbk1 = Workbooks

    Application.ScreenUpdating = False
    Application.EnableEvents = True
    Application.DisplayAlerts = False

    If Txt_1.Value = "" Then
        MsgBox "No Path Entered, please enter path to proceed", vbRetryCancel, "Path Missing"
    Else
        Wbk1.Open(Txt_1.Value).Sheets("sheet1").UsedRange.Copy

        Wbk.Activate
        Sheets("sheet1").Range("A1").PasteSpecial

        MsgBox "Done"

        Set xlapp = Nothing
        Set Wbk = Nothing
        Set Wbk1 = Nothing
    End If
End Sub

1 个答案:

答案 0 :(得分:0)

当您打开工作簿时,Open()函数具有返回值:您刚刚打开的工作簿对象。将其保存在变量中,然后使用Close()方法专门关闭该工作簿:

If Txt_1.Value = "" Then
    MsgBox "No Path Entered, please enter path to proceed", vbRetryCancel, "Path Missing"
Else
    Set Wbk = Workbooks.Open(Txt_1.Value)
    Wbk.Sheets("sheet1").UsedRange.Copy
    ThisWorkbook.Sheets("sheet1").Range("A1").PasteSpecial
    Wbk.Close False

    MsgBox "Done"
End If

确保Wbk被声明为Workbook(这是一种对象类型)而不是ThisWorkbook(它是一个对象而不是一个类型)。

模块中有许多不必要的变量和代码。您应该删除所有不需要的东西。请详细研究此代码,以了解为什么它正在运行。在我看来,你仍然没有掌握VBA中如何使用对象的概念。