如果Excel工作簿打开然后...... VBA

时间:2011-10-14 20:06:37

标签: excel vba excel-vba

我怎么能写代码来说。

    Dim xlApp As Excel.Application
    Dim xlWorkbook As Excel.Workbook
    Dim xlWorksheet As Excel.Worksheet

如果工作簿已经打开,那么......

    Set xlApp = GetObject(, "Excel.Application")

    elseif xlApp is nothing then
    Set xlApp = New Excel.Application
    xlApp.Visible = True
    Set xlWorkbook = xlApp.Workbooks.Open("E:\InspectionCreator\InspectionSheet.xlsx")
End if

我不希望它必须是一个特定的工作簿,我似乎无法在互联网上找到任何工作簿。任何帮助都会很棒。

3 个答案:

答案 0 :(得分:6)

首先尝试使用getobject:如果它抛出错误,则使用createobject:

  Dim xlApp As Excel.Application

  On Error Resume Next
  Set xlApp = GetObject(, "Excel.Application")
  On Error GoTo 0

  If xlApp Is Nothing Then
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True
  End If

答案 1 :(得分:3)

我曾经运行的代码与蒂姆非常相似,直到凯文·琼斯在专家交流的帖子中指出我将在这里重复(因为EE帖子在付费墙后面)

“请注意,使用CreateObject函数通过自动化启动Excel时,Excel不会加载任何正常自动加载的加载项或其他工作簿。这不是启动将使用的Excel会话的好方法要在不使用Excel以外的任何应用程序的自动化的情况下启动Excel应用程序实例,必须使用非自动化方式启动Excel应用程序。下面的代码说明了执行此操作的步骤。代码首先尝试获取自动化处理现有应用程序实例。如果找不到现有实例,则使用Shell命令启动新实例。“

 Dim ExcelApplication As Object
   Dim TimeoutTime As Long

   On Error Resume Next
   Set ExcelApplication = GetObject(, "Excel.Application")
   On Error GoTo 0
   If ExcelApplication Is Nothing Then
       Shell "Excel.exe"
       TimeoutTime = Timer + 5
       On Error Resume Next
       Do
           DoEvents
           Err.Reset
           Set ExcelApplication = GetObject(, "Excel.Application")
       Loop Until Not ExcelApplication Is Nothing Or Timer > TimeoutTime
       On Error GoTo 0
   End If
   If ExcelApplication Is Nothing Then
       MsgBox "Unable to launch Excel."
   Else
       ' Do something with the Excel instance...
   End If

答案 2 :(得分:1)

这可能会走向错误的方向,但这是我过去曾经使用过的东西..

    If Workbooks.Count > 1 Then 'Or in your case = 0
       'Do Something Here'
    Else
       'Do Something Else'
    End If

这样会告诉您是否打开了多个工作簿。否则,听起来你正在寻找特定的东西是否开放。

希望有所帮助。