Option Explicit
Function action
On Error Resume Next ‘遇错跳转,继续往下执行
Dim xlApp, xlBook, oExcelFile
oExcelFile = "D:\opc1.XLS" ‘全部代码只需改变文件的路径就可以,其他不用作任何改动
Dim isXlsOpen
isXlsOpen = False
Set xlApp = GetObject(, "Excel.Application") ‘获取EXCEL进程
If TypeName(xlApp) <> "Application" Then ‘检测到有Excel进程已经打开
Set xlApp = CreateObject("Excel.Application")
End If
xlBookFind = False
For Each oBook In xlApp.Workbooks ‘循环检查Excel进程打开的Workbooks
If LCase(oBook.FullName) = LCase(oExcelFile) Then ‘如果路径与所检查的文件一致
Set xlBook = oBook
xlBookFind = True
xlBook.Activate
Exit Function
End If
Next
If xlBookFind = False Then ‘#如果没有找到
xlApp.Visible = True ‘要打开的文件是否显示或是在后台运行
Set xlBook = xlApp.Workbooks.Open(oExcelFile)
End If
End Function
各位大侠,这是wincc里面的vbs脚本代码,实现的功能是检测指定的opc1 excel表格是否打开,如果已经打开了,则不进行任何动作,如果没有打开,则自动打开。。。。。
现在的问题是我把这段代码拷到excel 的宏程序里面,是绝对可以的,但是放进wincc的脚本里面,就打不开指定文件了。。。。
求助高手,这是什么原因啊,是这段代码该的问题,还是wincc不支持这样的代码。。。。。请高手看看
楼主最近还看过
这段脚本没啥问题,WinCC里边可以运行,我用按钮测试的完全没有问题。
你将下面的脚本拷贝一下试试:
Sub OnClick(Byval Item)
On Error Resume Next
Dim xlApp,xlBook,oExcelFile
oExcelFile = "D:\opc1.xls"
Dim isXlsOpen
isXlsOpen = False
Set xlApp = GetObject(,"Excel.Application")
If TypeName(xlApp) <> "Application" Then
Set xlApp = CreateObject("Excel.Application")
End If
xlBookFind = False
For Each oBook In xlApp.Workbooks
If LCase(oBook.FullName) = LCase(oExcelFile) Then
Set xlBook = oBook
xlBookFind = True
xlBook.Activate
End If
Next
If xlBookFind = False Then
xlApp.Visible = True
Set xlBook = xlApp.Workbooks.Open(oExcelFile)
End If
End Sub
首先,谢谢各位的回答!
但是,我的意思看来大家还是没有理解,我要的不是这样的功能
情况是这样的,这个excel文件在工程上是让手动打开的,现在出现的问题是操作员总是误操作将其关闭,导致报表不能生成,我现在想做一个全局脚本vbs动作,设定触发器,每5秒触发一次该动作,
实现
1. 如果检测到该文件已经打开了,则不进行任何动作
2.如果检测到该文件没有打开(也可能是操作员误操作关闭的),则打开该文件
我发的代码在excel 宏里面是完全可以实现要求的,但只要复制到vbs动作里面,就不执行了,还得手动打开,即使关闭了,也不会自动打开,
请各位高手指点一下,为什么在宏里面就可以,在vbs脚本里面就不行了呢,应该怎么改才能实现所要求的功能呢 主要是检测功能。。。。