我有一个要通过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
理想情况下,我希望能够看到工作表出现。
答案 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进程。