906379829 发表于 2018-5-16 07:27:25

cadvba如何做到能判断出这个cad文件夹里面有一个excel是否处于打开状态

如题,cadvba如何做到能判断出这个cad文件夹里面有一个excel是否处于打开状态,或者CAD VBA如何定义一个变量,本次运行一次程序为一个固定值,下次重新运行该程序还是上次值,这样我第一次打开Excel时赋值给一个变量,下次再打开时判断这个变量值就知道CAD有没有打开了

mikewolf2k 发表于 2018-5-16 09:04:51

两码事,是不是正处于打开状态,以及是不是被打开过。
很多因素会导致这个判断不准确,建议楼主给出最终目的,然后再想个更稳妥的方法。

906379829 发表于 2018-5-16 10:06:35

mikewolf2k 发表于 2018-5-16 09:04
两码事,是不是正处于打开状态,以及是不是被打开过。
很多因素会导致这个判断不准确,建议楼主给出最终目 ...

这样吧,Excel正处于打开状态,可以边运行VBA程序边往Excel里面写数据吗,之前我编的程序启动一次程序就要打开一次Excel,这样很不方便

mikewolf2k 发表于 2018-5-16 11:15:40

不打开excel怎么往里面写东西?用getobject获得excel对象,不要createobject。具体看链接excel的例子。

906379829 发表于 2018-5-16 12:38:38

回头试试,多谢了

poly168 发表于 2018-9-26 13:01:16


Set excellapp = GetObject(, "Excel.Application")   ' 连接Excel应用程序
    If excellapp Is Nothing Then
      Thisdrawing.Utility.Prompt "Excel应用程序未运行或为不支持的版本,请先打开表格再进行操作。" & vbCrLf
      GoTo lb1
    End If

vbcad 发表于 2018-9-30 18:47:24

调用FileOpenExists函数判断表格文件是否打开
用法:
if FileOpenExists("d:\test.xls") then
        msgbox "文件已经打开"
else
        msgbox "文件没有打开"
endif
注意:如果系统中有多个EXCEL实例时例外(需将GetObject带上文件完整路径)

Private Function FileOpenExists(FilePath As String) As Boolean
Dim objExcelApp As Object
Dim objBook As Object
Dim objBooks As Object

Set objExcelApp = GetObject(, "Excel.Application") '获得系统中运行的EXCEL对象
Set objBooks = objExcelApp.Workbooks '获得工作薄集合

For Each objBook In objBooks '循环每个工作簿的完整路径,判断是否文件是否打开
    If UCase(FilePath) = UCase(objBook.fullname) Then '如果找到
      FileOpenExists = True '返回真
      Exit For '退出循环
    End If
    Debug.Print objBook.fullname '显示完整路径
Next
End Function



GetObject语法简介
GetObject( [, class])
pathname 可选的;Variant (String)。包含待检索对象的文件的全路径和名称。如果省略 pathname,则 class 是必需的。
如果 pathname 是一个零长度的字符串 (""),则 GetObject 返回指定类型的新的对象实例。如果省略了 pathname 参数,则 GetObject 返回指定类型的当前活动的对象。如果当前没有指定类型的对象,就会出错。

页: [1]
查看完整版本: cadvba如何做到能判断出这个cad文件夹里面有一个excel是否处于打开状态