Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果Excel工作簿已打开,则。。。。。。VBA_Excel_Vba - Fatal编程技术网

如果Excel工作簿已打开,则。。。。。。VBA

如果Excel工作簿已打开,则。。。。。。VBA,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.Applica

我如何编写代码来表示

    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

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

首先尝试使用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

这可能是在错误的方向,但这里的东西,我用在过去

    If Workbooks.Count > 1 Then 'Or in your case = 0
       'Do Something Here'
    Else
       'Do Something Else'
    End If
这样,它会告诉您是否打开了多个工作簿。否则,听起来你好像在看是否有特定的东西是开放的


希望这能有所帮助。

我以前运行的代码与Tim的非常相似,直到Kevin Jones在一篇专家交流帖子中指出,我将在这里重复(因为EE帖子在付费墙后面)

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


这段代码将从何处运行?你在考虑VBScript吗?这些代码将运行solidworks,它与VB6非常独立,如果xlapp什么都不起作用的话。第一部分我对DAM有问题,我不敢相信这是一个很棒的解决方案谢谢你,是的。我喜欢优雅简单的解决方案这是最好的。鉴于您正在自动化Excel,我看不出上面的代码是如何工作的-
工作簿。Count
用于在活动应用程序中运行VBA。如果他使用的程序使用的是Office类的组合,则不会。然后,它可能会被编程为说“请告诉我此时打开了多少工作簿类。”“显然,它确实起了作用。但你是对的,我总是在其他excel表格中使用它。通常是隐藏窗口,使窗体看起来像他们自己的程序。这里总有自鸣得意的程序员,我讨厌,我喜欢这个概念。它将使你的应用程序更加健壮。最好告诉用户它无法启动Excel,而不是典型的“无法创建对象”。
 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