尽管在后台运行,但窗口不可见

时间:2019-06-19 15:34:58

标签: vba access-vba

我有一个要通过Access运行的宏,它将打开一个excel工作表,对其执行一些操作,然后使工作表保持打开状态。

除了无法打开我的excel文档以外,我大部分都可以使用。如果我检查任务管理器,则表明excel进程正在后台运行,因此确实发生了什么,实际上什么也看不到。

我试图对通过stackoverflow和其他资源找到的一些代码进行采样,我相信您会在当前代码中看到其中的一些。但是我尝试了大约一个小时,却无济于事。

Private Sub Command1_Click()

Dim fd As FileDialog
Dim MySheetPath As String
Dim Xl As Excel.Application
Dim XlBook As Excel.Workbook
Dim XlSheet As Excel.Worksheet

On Error GoTo ErrorHandler
'allowing selection of the time
Set fd = Application.FileDialog(msoFileDialogFilePicker)

fd.AllowMultiSelect = False

If fd.Show = True Then
    If fd.SelectedItems(1) <> vbNullString Then
        MySheetPath = fd.SelectedItems(1)
    End If
Else
    End
End If

Set Xl = CreateObject("Excel.Application")
Set XlBook = GetObject(MySheetPath)

ShowaWindow (MySheetPath)

Set XlSheet = XlBook.Worksheets(1)

XlSheet.Rows(2).EntireRow.Insert
XlSheet.Range("D2") = "ABC"

Set Xl = Nothing
Set XlBook = Nothing
Set XlSheet = Nothing

Exit Sub

ErrorHandler:
Set fd = Nothing
MsgBox "Error " & Err & ": " & Error(Err)

End Sub

Sub ShowaWindow(sFileName As String)
Dim oWb As Workbook

Set oWb = GetObject(sFileName)

For Each oWb In Workbooks
    If LCase(oWb.Name) <> LCase(sFileName) Then
        oWb.Windows(1).Visible = True
        Exit For
    End If
Next

End Sub

理想情况下,我希望能够看到工作表出现。

2 个答案:

答案 0 :(得分:1)

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

您无需在创建对象后立即放置它,而只需将对象设置为Nothing。

答案 1 :(得分:0)

Set XlBook = GetObject(MySheetPath)

这是错误的。不要使用GetObject打开工作簿,而要使用刚刚创建的Excel.Application实例:

Set XlBook = Xl.Workbooks.Open(MySheetPath)

稍后您迭代所有打开的工作簿:

 For Each oWb In Workbooks

但这不是Workbooks应用程序实例中的Xl集合,而是当前正在运行您的代码的实例中的Workbooks集合-您需要使用{{1 }}对象:

Xl

此外,在创建make the app instance visible之后,别忘了在完成后调用Private Sub ShowaWindow(ByVal app As Excel.Application, ByVal sFileName As String) '... For Each oWb In app.Workbooks XlBook.Close来正确拆除该EXCEL.EXE进程。