❶ excel中VBA有哪些作用哪里有教程啊
阐述了当前自动化软件的技术特点和发展趋势,并介绍了在iFIX自动化软件中使用VBA访问历史和实时数据的机制。通过一段使用VBA语言编写的程序,实现向Excel输出历史数据,生成历史报表的实例,说明了VBA语言在自动化软件中的应用。
1、自动化软件的发展趋势
自动化软件主要是指那些为用户提供人机操作界面(HMI)的开发和运行环境的软件,有些软件还能够提供回路控制功能,用户可以实现基于PC的控制方案。自动化软件应当具备如下的主要功能及特征:工业过程的动态可视化;数据采集和管理;过程监控和报警;报表和操作记录功能;系统安全等级化管理;为其他企业级程序提供实时和历史数据;简单的回路调节;批量控制等。
近年来,随着计算机和网络技术的发展与应用,自动化软件的发展也呈现如下的发展趋势。
1.1 开放和标准化
近年来,许多自动化软件厂商把通用的标准化编程语言,如微软的VBA(Visual Basic for Applications)集成在自己软件的开发环境中。VBA与VB(Visual Basic)极为相似,只是不能编译成可执行文件,这就为众多熟悉VB的用户提供了一个编程环境。用户在VBA环境中编写程序,可以使用DDE,ActiveX控件,ODBC,COM/DCOM 等技术使得自动化软件演变成开放的软件平台,在软件功能不能满足用户特殊需要时,用户可以根据自己的需要进行二次开发。
同时,OPC(OLE for Process Contro1)技术也是自动化软件的一个热点。OPC是Microsoft公司的对象链接和嵌入OLE/COM技术在过程控制方面的应用,为工业控制领域提供了标准的数据访问机制。
1.2 网络化
随着Internet/Intranet的普及,自动化软件又集成了基于TCP/IP协议的网络功能,使其成为协作生产制造过程中的核心系统,实现了企业网络环境下实时数据的管理、实时流程查看、实时趋势浏览、报警记录与查看、报表数据存储、历史趋势存储与查看、生产过程报表生成、生产统计报表生成等功能,从而实现过程控制系统与信息系统的网络集成。用户可以通过IE浏览器登录自动化软件的Web Server服务器,实现远程浏览生产过程。
1.3 管理控制一体化
生产管理信息系统是大型企业重点建设的项目,随着大型数据库技术的日益成熟,自动化软件成为全厂范围内信息收集和集成的工具。在未来企业的信息化进程中,自动化软件将成为硬件设备与生产管理信息系统的桥梁。因为自动化软件能为生产管理信息系统提供生产过程的实时和历史数据,而生产管理信息系统叉对生产过程有着指导作用。
2、VBA在自动化软件中的应用
下面,以iFIX软件为例,通过VBA编写的脚本程序,实现向Excel输出历史数据的实例来具体说明VBA在自动化软件中的应用。
2.1 iFIX软件简介
iFIX软件是GE自动化软件产品家族中的一个基于Windows的HMI/SCADA组件。iFIX是基于开放的和组件技术的产品,专为在工厂级和商业系统之间提供易于集成和协同工作的设计环境。iFIX中还加入了OPC,VBA,ActiveX,DDE,ODBC等工业标准化技术,可以提供一个强大的开发环境,实现用户的特殊需求。
2.2 iFIX软件中VBA的应用实例
a) iFIX的数据访问机制。iFIX中的数据分为实时数据库和历史数据库,这2种数据库的访问方法不同,对于实时数据库,iFIX的VBA项目中提供了各种iFIX对象,利用这些对象,就可以方便地在VBA中实现对iFIX的控制功能;对于历史数据库,可以访问关系数据库来获得历史数据。对于这些关系数据库,各种编程语言大多都提供了相应的数据控件来访问,在VBA 中,通常采用ADO对象模型来访问这些历史数据库。
b) ADO Data控件使用Microsoft ActiveX数据对象(ADO)来快速建立数据绑定的控件和数据提供者之间的连接。数据绑定控件是任何具有“数据源”属性的控件。数据提供者可以是任何符合ODBC规范的数据源。
c) 利用VBA实现Excel报表。通过编写VBA脚本程序,可以实现向Excel输出历史数据,生成Excel报表。其触发方式有2种:一种是通过iFIX的调度程序,以固定的时间或事件来启动VBA脚本程序,生成报表;还可以直接使用VBA生成用户操作界面,用户可以输入开始时间,间隔等参数,由用户点击按钮启动VBA脚本程序,生成报表。这2种方式在程序上大同小异,其主要部分VBA脚本程序如下。其中程序将历史数据、时间、TAG名称等参数送到Excel的Sheet2中,用户可以将Sheet1作为报表版面,通过编辑版面格式,引用Sheet2数据等方式,形成最终报表。
根据用户要求定义所要查询的时间段和变量名称
Dim MyDate,StartTime,EndTime As String Dim Tagl,Tag2 As String
Tagl=“TIC101.F_CV”
Tag2=“TIC102.F_CV”
MyDate=Format(Now(),“yyyy-mm—dd”)
StartTime=MyDate&“ ”& “0:00:00”
EndTime=MyDate&“ ”& “23:OO:OO”
使用ADO对象来访问ODBC数据库,用SQL语盲查询历史数据
strQuerySamp=“Select Datetime,Value,Tag From Fix Where Mode=‘Sample’and (TAG=‘ “& Tagl & ”‘or TAG=’”& Tag2 ) and Interval=‘ 01:00:00’and (Datetime) >={ts‘“& StartTime &”’ )and Datetime<={ts‘“ EndTime & ”’})”
Dim cnADO As New ADODB.Connection
Dim rsADO As Recordset
Set cnADO=New ADODB.Connection
cnADO.ConnectionString=“ DSN= FIX Dynamics Historical Data;UID=sa;PWD= ;”
cnAD0.Open “FIX Dynamics Historical Data”,“sa”,“”
Set rsADO— New ADODB.Recordset
rsADO.Open strQuerySamp,cnADO,adOpenForwardOnly,adLockBatchOptimistic
调用Excel,将历史数据写入打开的Excel报表文件
Dim 0utReport File,InReportFile As String
Set Intyexcel= New Excel.Application
InReportFile-”C:\data\HisReport“
Intyexce1.Workbooks.Open InReportFile &“.XLS”
Intyexce1.Sheets(“Sheet2”).Select
While rsADO.EOF < > True
With Intyexce1.Worksheets(2)
For C=0 To Items
If rsADO(c)= “ ”Then .Cells(r,C + 1).Value= rsADO(c)
Next C
r; r+ 1
rsADO.M oveNex
End With
W end
关闭Excel,保存报表文件
OutReportFile=InRep0rtFile &“_”& MyDate
Intyexce1. ActiveW orkbook. SaveAs OutReportFile
Intyexce1.Quit
Set Intyexcel=Nothing
Set cnADO==Nothing
3、VBA应用的注意事项与展望
集成了VBA编程语言的自动化软件,变成了标准化的、开放的软件开发平台,这使得自动化软件本身具有了无限的开放性和可扩展性。但同时也带来一些问题。首先,开发人员要确保VBA脚本程序的可靠和精简。VBA程序要经过严格和全面的测试,并要编写出错处理程序,保证生产过程控制的万无一失。其次,目前VBA程序还不能编写多线程程序,开发人员要选择恰当的触发方式,避免发生冲突。
总之,随着最终用户变得更加成熟以及对自动化软件的更加了解,他们将通过编写程序的方式来针对其过程及系统进行更多的定制,以便能够满足其需求。自动化软件将不断为用户提供这样的安全可靠的技术手段。
参考文献
[1] 刘恩涛,赵耀峰.Visual Basic6.0编程技术与实例分析,北京:中国水利水电出版杜,1999.455~456,472~478,479~482
[2] 刘炳文,张绅.Visual Basic程序设计——数据库篇.北京:人民邮电出版社。1999.196~198,224~232,248~251
详细教程:http://whzx.tzr.com.cn/read.php?wid=455
❷ 给个excel的vba脚本,实现功能:将sheet1中的B,C,D,G,H,I,这6列从第二行开始,引到sheet2的ABCDEF中
Dim i
Sheets("sheet2").Cells.Clean ‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’清除Sheets("sheet2")的所有数据
i = 2
Do
Sheets("sheet2").Cells(i, "A") = IIf(Sheets("sheet1").Cells(i, "B") = "--", 0, Sheets("sheet1").Cells(i, "B"))
Sheets("sheet2").Cells(i, "B") = IIf(Sheets("sheet1").Cells(i, "C") = "--", 0, Sheets("sheet1").Cells(i, "C"))
Sheets("sheet2").Cells(i, "C") = IIf(Sheets("sheet1").Cells(i, "D") = "--", 0, Sheets("sheet1").Cells(i, "D"))
Sheets("sheet2").Cells(i, "D") = IIf(Sheets("sheet1").Cells(i, "G") = "--", 0, Sheets("sheet1").Cells(i, "G"))
Sheets("sheet2").Cells(i, "E") = IIf(Sheets("sheet1").Cells(i, "H") = "--", 0, Sheets("sheet1").Cells(i, "H"))
Sheets("sheet2").Cells(i, "F") = IIf(Sheets("sheet1").Cells(i, "I") = "--", 0, Sheets("sheet1").Cells(i, "I"))
i = i + 1
Loop Until Sheets("sheet1").Cells(i, "B") = ""
把以上代码加到某个事件代码里去,比如说你刷新Sheets("sheet1")的网页数据时!
❸ EXC怎么用vba脚本对多个单元格进行保存检查
1、首先我们打开一个工作样表作为例子。
2、在例子中我们在a1和b1单元格分别输入有名字和地址两个分列,现在要做的就是使用vba把a1和b1单元格的内容进行互换。
方法如下:
6、还有一点需要注意的是使用这种方法进行数据调整虽然序列没有发生改变,但是页面设置会因为插入和删除的原因而发生改变,可以看到运行宏后,宏指令按钮的位置发生了改变。
❹ excel 文件中编辑VBA脚本,在ThisWorkbook中添加 Application.Visible = 0 DataReport.Show 后遇到的问题
一般来说 application.visible= ture
这样是能够让excel可见
这样你就可以关闭他
如何设置了application.visible=0
应该是不可见 所以你无法继续打开一个新excel文件 因为你新建了一个与现在文档相同的excel文件 但由于你当前excel不可见所以你新建
你也可以加入activeworkbook.close 让他自动关闭
❺ vba脚本如何设置使用时间限制
如果为限定在特殊时间范围内使用,可以的
' *******例1: 在每天8~17点之间可以运行,其他时间不允许
if Hour(Time) >= 8 and Hour(Time) <= 16 then
' 你的程序代码
end if
' *******例2: 在每月前5天之可以运行,其他时间不允许
if day(date) <= 5 then
' 你的程序代码
end if
❻ 什么是VBA脚本
办公软件的VBA指的是在已有的应用程序平台上,开发出的执行程序,使已有的应用程序(EXCEL等)自动化,VBA脚本就是大家说的VBA代码
❼ VBA终止用户的删除行/列操作
PrivateSubWorkbook_SheetSelectionChange(ByValShAsObject,ByValTargetAsRange)
DimmsgAsLong
If(Target.Rows.Count=1OrTarget.Columns.Count=1)Then
If(Target.Columns.Count>256OrTarget.Rows.Count>65536)Then
msg=MsgBox("是否删除行列",vbYesNo)
Ifmsg=7Then
Cells(1,1).Select
ExitSub
EndIf
EndIf
EndIf
EndSub
PrivateSubWorkbook_SheetChange(ByValShAsObject,ByValTargetAsRange)
DimmsgAsLong
If(Target.Rows.Count=1OrTarget.Columns.Count=1)Then
If(Target.Columns.Count>256OrTarget.Rows.Count>65536)Then
msg=MsgBox("ÊÇ·ñɾ³ýÐлòÁÐ",vbYesNo)
Ifmsg=7Then
Application.Undo
ExitSub
EndIf
EndIf
EndIf
EndSub
Worksheet_Change事件可以做到撤销上一步的操作,不过会死循环,这个不太理想,可以用Workbook_SheetSelectionChange事件,上述实现禁止整行或整列选取。如果单只是终止删除操作,只能通过excel锁定来实现
❽ excel VBA 脚本
Subaa()
Dimarr(1To4,1To3)
k=0
Fori=1To2
Forj=1To2
k=k+1
arr(k,1)=Cells(i+1,1)
arr(k,2)=Cells(1,j+1)
arr(k,3)=Cells(i+1,j+1)
Nextj
Nexti
Range("E1:G4")=arr
EndSub
❾ excelVBA脚本问题,要求是如果b3,b6,b7的值为空白则停止脚本,如果其中任...
可不可以这样(我这是按键精里面的语言,跟VB差不多)
if *=* and *=* then
end if
如果 * 等于 * 而且 * 等于 * 则
结束
引用就是
if range("b3") = "" and range ("b6")="" and range ("b7")="" tne
exit sub