【问题标题】:if Excel Workbook is open then...... VBA如果 Excel 工作簿是打开的,那么...... VBA
【发布时间】:2016-01-12 18:33:01
【问题描述】:

我怎么能写代码说呢。

    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

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

【问题讨论】:

  • 这段代码将从哪里运行?
  • 你在想VBScript吗?
  • 运行solidworks的代码,它像vb6一样非常独立

标签: excel vba excel


【解决方案1】:

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

【讨论】:

  • 如果 xlapp 什么都没有,第一部分我遇到问题
【解决方案2】:

我曾经运行的代码与 Tim 的代码非常相似,直到 Kevin Jones 在 Experts-Exchange 帖子中指出我将在此重复(因为 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

【讨论】:

  • 我喜欢这个概念。它将使您的应用程序更加健壮。最好告诉用户它无法启动 Excel,而不是典型的“无法创建对象”。
【解决方案3】:

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

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

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

希望对您有所帮助。

【讨论】:

  • 大坝无法相信这是一个很棒的解决方案谢谢
  • 任何时候,是的。我最喜欢优雅简单的解决方案。
  • 鉴于您正在自动化 Excel,我看不出上面的代码是如何工作的 - Workbooks.Count 用于在活动应用程序中运行 VBA。
  • 如果他正在使用的程序使用 Office 类的组合,则不会。然后它可能会被编程为说“给我数一下目前有多少工作簿课程是开放的”。显然它确实有效。但你是对的,我总是在其他 Excel 表格中使用它。通常隐藏窗口以使表单看起来像他们自己的程序。
  • 这里总是有自鸣得意的程序员,我讨厌这样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
相关资源
最近更新 更多