VBA:需要关闭窗口,只能关闭工作簿

时间:2015-04-29 13:55:03

标签: excel vba excel-vba

我已经设置了一些VBA来过滤特定类型的文件,并在新工作表中返回过滤后的数据(只显示了3列)。我在该工作表中有两个按钮 - 一个用于简单地选择文件路径,另一个用于在该路径中的文件上运行过滤器(在单元格F7中)。

我的问题是,我无法在不打开的情况下阅读所选文件。这很好,因为它是一个非常快速的过程,但我关闭该文件的命令只关闭工作簿,它会打开一个空的Excel窗口。我想要的唯一工作簿是打开我执行命令的工作簿,也就是过滤结果粘贴到的工具簿。有什么建议?我想弄清楚要关闭窗口的方法,或者在没有窗口实际需要首先打开的情况下执行此过程(这将是理想的)。

Public Sub CommandButton2_Click()
b = Application.GetOpenFilename()

If b = False Then
    MsgBox (" You have not selected a file!")
Else
    ThisWorkbook.Worksheets("SelectUpdateFile").Cells(7, 6).Value = b
    MsgBox ("Your file has been selected. Click the Filter button below to generate MOVED nodes.")


End If

End Sub

Sub AutoFilter()
    Dim s As String
    Dim oApp As Object
    Dim wb As Object
    Dim ws As Object


    Set oApp = CreateObject("Excel.Application")
    oApp.Visible = True


    On Error Resume Next

    Set wb = oApp.Workbooks.Open(Filename:=Cells(7, 6))

    On Error GoTo 0


    If Not wb Is Nothing Then
        'specify worksheet name
        Set ws = wb.Worksheets(1)
        s = "AB"
        With ws
            'disable all previous filters
            .AutoFilterMode = False
            'apply new filter
            .Range("$A$2:$K$100000").AutoFilter Field:=1, Criteria1:="=*MOVE*", _
            Operator:=xlAnd
            .Range("$A$2:$K$100000").AutoFilter Field:=7, Criteria1:="=*%3e*", _
        Operator:=xlAnd
        'Copy
            .Range("a2:a100000").Copy
            Sheets("MovedNodes").Range("a1").PasteSpecial xlPasteValues

            .Range("b2:b100000").Copy
            Sheets("MovedNodes").Range("b1").PasteSpecial xlPasteValues

            .Range("g2:g100000").Copy
            Sheets("MovedNodes").Range("c1").PasteSpecial xlPasteValues
            'Paste to Sheet2

            End With


End If
oApp.DisplayAlerts = False
oApp.Workbooks.Close
    MsgBox ("Done! Click OK to view the moved nodes.")

Application.ScreenUpdating = True
Sheets("MovedNodes").Select


End Sub

1 个答案:

答案 0 :(得分:1)

您只是在代码中关闭工作簿。

oApp.Workbooks.Close

只关闭工作簿并打开窗口。

关闭工作簿后添加oApp.quit