excel中VBA有哪些作用?哪里有教程啊?

excel中VBA有哪些作用?哪里有教程啊?,第1张

分类: 电脑/网络 >>软件

解析:

阐述了当前自动化软件的技术特点和发展趋势,并介绍了在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 网络化

随着Inter/Intra的普及,自动化软件又集成了基于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 ADO As New ADODB.Connection

Dim rsADO As Recordset

Set ADO=New ADODB.Connection

ADO.ConnectionString=“ DSN= FIX Dynamics Historical Data;UID=sa;PWD= ;”

AD0.Open “FIX Dynamics Historical Data”,“sa”,“”

Set rsADO— New ADODB.Recordset

rsADO.Open strQuerySamp,ADO,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 ADO==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

详细教程:whzx.tzr/read.php?wid=455

EXCEL vba 数据库连接

听语音

原创

|

浏览:7393

|

更新:2016-06-23 16:12

|

标签:EXCEL VBA

1

请点击输入图片描述

2

请点击输入图片描述

3

请点击输入图片描述

4

请点击输入图片描述

5

请点击输入图片描述

分步阅读

vba可以连接数据库并获取数据库的信息进行显示。

工具/原料

EXCEL2007

方法/步骤

1

首先在开发工具选项卡中插入一个表单控件(按钮)。

请点击输入图片描述

2

拖拽出按钮后会d出指定宏的窗口,这里我们新建宏。

请点击输入图片描述

3

新建按钮单击后,进入模块代码编辑界面,这里开始编辑代码。

请点击输入图片描述

4

如图,代码已经编辑好了,这里为大家解析一下代码的功能:

Dim cn As Object    '定义数据链接对象 ,保存连接数据库信息

Dim rs As Object    '定义记录集对象,保存数据表

Set cn = CreateObject("ADODB.Connection")  '创建数据链接对象

Set rs = CreateObject("ADODB.RecordSet")  '创建记录集对象,用于接收数据查询获得的结果集

Dim strCn As String, strSQL As String '字符串变量

strCn = "Provider=sqloledbServer=(local)Database=yourdatabasenameUid=saPwd=yourpassword"    '定义数据库链接字符串

strSQL = "select bookname,price,author from book"    '设置SQL语句

cn.Open strCn '打开连接

rs.Open strSQL, cn‘读取数据库中的数据

Dim i As Integer, j As Integer, sht As Worksheet 'i,j为整数变量;sht 为excel工作表对象变量,指向某一工作表

Set sht = ThisWorkbook.Worksheets("sheet1")

’循环读取数据并将数据显示到excel中

Do While Not rs.EOF     '当数据指针未移到记录集末尾时,循环下列 *** 作

sht.Cells(i, 1) = rs("bookname")    '把当前记录的字段1的值保存到sheet1工作表的第i行第1列

sht.Cells(i, 2) = rs("price")    '把当前字段2的值保存到sheet1工作表的第i行第2列

sht.Cells(i, 3) = rs("author")    '把当前字段2的值保存到sheet1工作表的第i行第2列

rs.MoveNext                      '把指针移向下一条记录

i = i + 1                        'i加1,准备把下一记录相关字段的值保存到工作表的下一行

Loop                                 '循环

rs.Close   '关闭记录集,至此,程序将把某数据表的字段1和字段2保存在excel工作表sheet1的第1、2列,行数等于数据表的记录数

5

执行结果与数据库中结果对比

请点击输入图片描述

请点击输入图片描述

vba是在最初组织旧版评教系统时就接触过的,但一直没研究过,也没仔细看过。只知道它可以整理数据。

了解:

Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic 脚本。——来自百度百科

背景:

这次使用vba是因为:这次评教最初用的外网,连的万达238的数据库,但由于服务器出现问题,及时更换了局域网,连的校内207的库。之后万达服务器恢复后,又继续用外网。即:评教的数据在两个数据库中。这样对统计成绩就造成了一定的困难。——如何对成绩进行整合??

解决:

其实在这里用vba,就相当于把excel当成数据库,对其进行 *** 作。

我是先把成绩分别导出来,也就是有两份成绩单。每一份都不完整:有可能一个老师,一部分学生给的分在1个库中,另一部分的分在另一个库。这样统计出来成绩就是这样的:

数据库1:

数据库2:

vba代码:

'作者:赵寒-借鉴师哥旧版vba

'时间:2016-6-19 19:52:10

'过程说明:此过程为多个库中评教数据合并专用过程。主要功能是计算某教师、某课程在多个库中学生评分

' 的平均值。

'使用说明:处理的Excel必须是直接从评教系统导出的Excel,不得更换Excel中列的顺序。且需要将多个成绩单数据放在同一个excel进行整合统计。

Sub formatting()

Dim rowCount As Integer '总行数

Dim colCount As Integer '总列数

Dim tempRowCount As Integer '临时行数

Dim tempColumnCount As Integer '临时列数

Dim arrResult(100) As String '存放临时结果

Dim strSheetName As String '存放原工作表名

Dim sheetResult As Worksheet '自定义的工作表

Dim n


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9955104.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存