都市喵奇谭漫画全集:实现VB与EXCEL的无缝连接

来源:百度文库 编辑:九乡新闻网 时间:2024/05/07 05:32:47

如何实现VB与EXCEL的无缝连接

VB是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的不便。因此有很多程序员现在已经充分利用EXECL的强大报表功来实现报表功能。但由于VB与EXCEL由于分别属于不同的应用系统,如何把它们有机地结合在一起,是一个值得我们研究的课题。

  一、 VB读写EXCEL表:

  VB本身提自动化功能可以读写EXCEL表,其方法如下:

  1、在工程中引用Microsoft Excel类型库:

  从"工程"菜单中选择"引用"栏;选择Microsoft Excel 9.0 Object Library(EXCEL2000),然后选择"确定"。表示在工程中要引用EXCEL类型库。

  2、在通用对象的声明过程中定义EXCEL对象:


Dim xlApp As Excel.Application
Dim xlBook As Excel.WorkBook
Dim xlSheet As Excel.Worksheet
  3、在程序中操作EXCEL表常用命令:


Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象
Set xlBook = xlApp.Workbooks.Open("文件名") '打开已经存在的EXCEL工件簿文件
xlApp.Visible = True '设置EXCEL对象可见(或不可见)
Set xlSheet = xlBook.Worksheets("表名") '设置活动工作表
xlSheet.Cells(row, col) =值 '给单元格(row,col)赋值
xlSheet.PrintOut '打印工作表
xlBook.Close (True) '关闭工作簿
xlApp.Quit '结束EXCEL对象
Set xlApp = Nothing '释放xlApp对象
xlBook.RunAutoMacros (xlAutoOpen) '运行EXCEL启动宏
xlBook.RunAutoMacros (xlAutoClose) '运行EXCEL关闭宏
  4、在运用以上VB命令操作EXCEL表时,除非设置EXCEL对象不可见,否则VB程序可继续执行其它操作,也能够关闭EXCEL,同时也可对EXCEL进行操作。但在EXCEL操作过程中关闭EXCEL对象时,VB程序无法知道,如果此时使用EXCEL对象,则VB程序会产生自动化错误。形成VB程序无法完全控制EXCEL的状况,使得VB与EXCEL脱节。

  二、 EXCEL的宏功能:

  EXCEL提供一个Visual Basic编辑器,打开Visual Basic编辑器,其中有一工程属性窗口,点击右键菜单的"插入模块",则增加一个"模块1",在此模块中可以运用Visual Basic语言编写函数和过程并称之为宏。其中,EXCEL有两个自动宏:一个是启动宏(Sub Auto_Open()),另一个是关闭宏(Sub Auto_Close())。它们的特性是:当用EXCEL打含有启动宏的工簿时,就会自动运行启动宏,同理,当关闭含有关闭宏的工作簿时就会自动运行关闭宏。但是通过VB的自动化功能来调用EXCEL工作表时,启动宏和关闭宏不会自动运行,而需要在VB中通过命令xlBook.RunAutoMacros (xlAutoOpen)和xlBook.RunAutoMacros (xlAutoClose) 来运行启动宏和关闭宏。

  三、 VB与EXCEL的相互勾通:

  充分利用EXCEL的启动宏和关闭宏,可以实现VB与EXCEL的相互勾通,其方法如下:

  在EXCEL的启动宏中加入一段程序,其功能是在磁盘中写入一个标志文件,同时在关闭宏中加入一段删除此标志文件的程序。VB程序在执行时通过判断此标志文件存在与否来判断EXCEL是否打开,如果此标志文件存在,表明EXCEL对象正在运行,应该禁止其它程序的运行。如果此标志文件不存在,表明EXCEL对象已被用户关闭,此时如果要使用EXCEL对象运行,必须重新创建EXCEL对象。

  四、举例:

  1、在VB中,建立一个FORM,在其上放置两个命令按钮,将Command1的Caption属性改为EXCEL,Command2的Caption属性改为End。然后在其中输入如下程序:


Dim xlApp As Excel.Application '定义EXCEL类
Dim xlBook As Excel.Workbook '定义工件簿类
Dim xlsheet As Excel.Worksheet '定义工作表类

Private Sub Command1_Click() '打开EXCEL过程
 If Dir("D:\temp\excel.bz") = "" Then '判断EXCEL是否打开
  Set xlApp = CreateObject("Excel.Application") '创建EXCEL应用类
  xlApp.Visible = True '设置EXCEL可见
  Set xlBook = xlApp.Workbooks.Open("D:\temp\bb.xls") '打开EXCEL工作簿
  Set xlsheet = xlBook.Worksheets(1) '打开EXCEL工作表
  xlsheet.Activate '激活工作表
  xlsheet.Cells(1, 1) = "abc" '给单元格1行驶列赋值
  xlBook.RunAutoMacros (xlAutoOpen) 运行EXCEL中的启动宏
 Else
  MsgBox ("EXCEL已打开")
 End If
End Sub

Private Sub Command2_Click()
 If Dir("D:\temp\excel.bz") <> "" Then '由VB关闭EXCEL
  xlBook.RunAutoMacros (xlAutoClose) '执行EXCEL关闭宏
  xlBook.Close (True) '关闭EXCEL工作簿 
  xlApp.Quit '关闭EXCEL
 End If
 Set xlApp = Nothing '释放EXCEL对象
 End
End Sub

  2、在D盘根目录上建立一个名为Temp的子目录,在Temp目录下建立一个名为"bb.xls"的EXCEL文件。

  3、在"bb.xls"中打开Visual Basic编辑器,在工程窗口中点鼠标键选择插入模块,在模块中输入入下程序存盘:

Sub auto_open()
 Open "d:\temp\excel.bz" For Output As #1 '写标志文件
 Close #1
End Sub
Sub auto_close()
 Kill "d:\temp\excel.bz" '删除标志文件
End Sub

  4、运行VB程序,点击EXCEL按钮可以打开EXCEL系统,打开EXCEL系统后,VB程序和EXCEL分别属两个不同的应用系统,均可同时进行操作,由于系统加了判断,因此在VB程序中重复点击EXCEL按钮时会提示EXCEL已打开。如果在EXCEL中关闭EXCEL后再点EXCEL按钮,则会重新打开EXCEL。而无论EXCEL打开与否,通过VB程序均可关闭EXCEL。这样就实现了VB与EXCEL的无缝连接。

 

VB调用EXCEL(二)

三、使用Excel应用程序   

  如前所述,在VB应用程序中调用Excel应用程序,就是使用Application对象的属性、方法和事件。下面分类给出其中常用的属性和方法。  1、使用工作薄  Workbook对象代表Excel应用程序中当前打开的一个工作簿,包含在Workbooks集合中。可以通过Workbooks集合或表示当前活动工作簿的Active Workbook对象访问Workbook对象。   常用的方法有: 属性、方法 意义 Add方法 创建新的空白工作簿,并将其添加到集合中。 Open方法打开工作簿。 Activate方法激活工作簿,使指定工作簿变为活动工作簿,以便作为Active Workbook对象使用。 Save方法按当前路径和名称保存现有工作簿(如是首次保存,则将其保存到缺省名称中,如BOOK1.XLS)。 SaveAs方法 首次保存工作簿或用另一名称保存工作簿。 Close方法关闭工作簿。 PrintOut方法 打印工作簿,语法为: PrintOut (from, To, Copies, Preview, Printer, ToFile, Collate)   可选参数: From:打印的起始页号。如省略将从起始位置开始打印。 To:打印的终止页号。如省略将打印至最后一页。 Copies:要打印的份数。如省略将只打印一份。 Preview:如果为True则Excel打印指定对象之前进行打印预览。如果为False,或省略则立即打印该对象。 Printer:设置活动打印机的名称。 ToFile:如果为True则打印输出到文件。 Collate:如果为True则逐份打印每份副本。  下面语句将活动工作簿的2到5页打印3份: ActiveWorkbook.PrintOut From:=2 To 5 Copies:=3   示例2:生成、保存、关闭工作簿 Dim VBExcel As Excel.Application Set VBExcel== CreateObject("Excel.Application") With VBExcel .Workbooks.Add With ActiveWorkbook .Save As"C: \Temp \OUTPUT.XLS" .Close End With .Quit End With   2、使用工作表  Sheets集合表示工作簿中所有的工作表。可以通过Sheets集合来访问、激活、增加、更名和删除工作表。一个Worksheet对象代表一个工作表。  常用的属性、方法有: 属性、方法 意义 Worksheets属性返回Sheets集合。 Name属性 工作表更名。 Add方法创建新工作表并将其添加到工作簿中。 Select方法 选择工作表。 Copy方法复制工作表。 Move方法 将指定工作表移到工作簿的另一位置。 Delete方法删除指定工作表。 PrintOut方法 打印工作表。  示例3:将C盘工作簿中的工作表复制到A盘工作簿中: Dim VBExcel As Excel.Application Set VBExcel=CreateObject("Excel.Application") With VBExcel  .Workbooks.Open "C:\Temp\OUTPUT.XLS"  .Workbooks.Open"A:\OUTPUT1.XLS"  .Workbooks("OUTPUT.XLS").Sheets ("Sales").Copy  .Workbooks("OUTPUT1.XLS)  .Workbooks("OUTPUT1.XLS").Save  .Workbooks("OUTPUT.XLS").Close  .Workbooks("OUTPUTI.XLS").Close  .Quit End With   3、使用单元范围  Range对象代表工作表的某一单元格、某一行、某一列、某一选定区域或者某一三维区域。  常用的属性、方法有: 属性、方法 意义 Range属性 Range (arg)其中arg为A1--样式符号,表示单个单元格或单元格区域。 Cells属性 Cells (row, col )(其中row为行号,col为列号)表示单个单元格。 ColumnWidth属性 指定区域中所有列的列宽。 Rowl3eight属性指定区域中所有行的行宽。 Value属性指定区域中所有单元格的值(缺省属性)。 Formula属性指定单元格的公式,由A1--样式引用。 Select方法 选择范围。 Copy方法将范围的内容复制到剪贴板。 C1earContents方法 清除范围的内容。 Delete方法 删除指定单元范围。   4、使用图表  Chart对象代表工作簿中的图表。该图表既可为嵌人式图表(包含于ChartObject对象中)也可为分立的图表工作表。  常用方法有: 方法 意义 Add方法 新建图表工作表。返回Chart对象。 PrineOut方法 打印图表。 ChartWizard方法修改给定图表的属性,其语法为:  ChartWizard(Source, Gallery, Format, P1otBy, CategoryLabels, SeriesLabels, HasLegend, Title, CategoryTitle, ValueTitle, ExtraTitle)   其中:  Source:包含新图表的源数据的区域。如省略,将修改活动图表工作表或活动工作表中处于选定状态的嵌人式图表。  Gallery:图表类型。其值可为下列常量之一:xlArea, x1Bar, xlColumn, xlLine, x1Pie, xlRadar,x1XYScatter, xlCombination, x13DArea, x13DBar、x13DColumn, x13DLine, x13DPie、x13 DSurface、xlDoughnut或xlDefaultAutoFormat。  Format:内置自动套用格式的编号。如省略,将选择默认值。  P1otBy:指定系列中的数据是来自行(xlRows)还是列(xlColumns)。  CategoryLabels:表示包含分类标志的源区域内行数或列数的整数。  SeriesLabels:表示包含系列标志的源区域内行数或列数的整数。  HasLegend:若指定True,则图表将具有图例。  Title:图表标题文字。   CategoryTitle:分类轴标题文字。  ValueTitle:数值轴标题文字。  ExtraTitle:三维图表的系列轴标题,或二维图表的第二数值轴标题。  可组合使用Add方法和ChartWizard方法,以创建包含工作表中数据的图表工作表。下例基于工作表“Sheetl”中单元格区域“A1:A20”中的数据生成新的折线图并打印。 With Charts.Add  .ChartWizard source:=Worksheets ("sheet1").Range ("a1:a20"),gallery:=xlLine, title:=“折线图表”  .Printout End With   5、使用Excel工作表函数  在VB语句中可使用大部分的Excel工作表函数,可通过WorksheetFunction对象调用Excel工作表函数。下面的Sub过程用Min工作表函数求出指定区域中单元格的最小值,并通过消息框显示结果值。 Sub UseFunction() Dim myRange As Range Set myRange=Worksheets ("Sheet1").Range("B2:F10") answer=Application.WorksheetFunction.Min(myRange) MsgBox answer End Sub   如果使用以区域引用为参数的工作表函数,必须指定一个Range对象。如可用Match工作表函数对A1:A10区域的所有单元格进行搜索。 Sub FindFirst() my Var=Application.WorksheetFunction.Match (9, Worksheets( 1).Range("A1:A10"),0) MsgBox myVar End Sub   要在单元格中插人工作表函数,可将该函数指定为对应于Range对象的Formula属性值。在以下示例中,将当前工作簿Sheetl内A1:B3区域的Formula属性指定为RAND工作表函数(此函数产生二个随机数)。 Sub InsertFormula() Worksheets ("Sheet1" ).Range("A1:B3").Formula="RAND()" End Sub   以上简要介绍了Excel对象模型中部分对象及其属性和方法,更详细的信息可参阅Excel 2000帮助中的“Microsoft Excel Visual Basic参考”一节的内容。实际上,Microsoft Office家族的Word,PowerPoint, Access和Project等应用程序都可以在VB应用程序中调用,其原理和步骤完全相同,只是其对象模型有所不同而已。

 

VB调用EXCEL(转载)

 VB调用EXCEL
  一、Excel对象模型

  为了在VB应用程序中调用Excel,必须要了解Excel对象模型。Excel对象模型描述了Excel的理论结构,所提供的对象很多,其中最重要的对象,即涉及VB调用Excel最可能用到的对象有:



  二、调用Excel

  在VB应用程序中调用Excel,实质是将Excel作为一个外部对象来引用,由Excel对象模型提供能从VB应用程序内部来程序化操纵的对象以及相关的属性、方法和事件。

  1、在VB工程中添加对Excel类型库的引用

  为了能从VB应用程序中访问Excel丰富的内部资源,使Excel应用程序运行得更快,需要在VB工程中添加对Excel类型库的引用。具体步骤如下:

  a)从VB5“工程”菜单中选择“引用”;

  b) 在“引用”对话框中选择Excel类型库:"Microsoft Excel9.0 Object Library";

  c)单击左边小方框,使之出现“√”符号;

  d)按“确定”退出。

  注:要想在VB应用程序中调用Excel,你的计算机系统中必须安装Excel。

  2、引用Application对象

  Application对象是Excel对象模型的顶层,表示整个Excel应用程序。在VB应用程序中调用Excel,就是使用Application对象的属性、方法和事件。为此,首先要声明对象变量:


Dim VBExcel As Object
  或直接声明为Excel对象:


Dim VBExcel As Excel.Application
  在声明对象变量之后,可用CreateObject函数或GetObject函数给变量赋值新的或已存在的Application对象引用。

  a)用CreateObject函数生成新的对象引用:


Set VBExcel=CreateObject ("Excel.Application")
  字符串“Excel.Application”是提供Excel应用程序的编程ID,这个变量引用Excel应用程序本身。

  b)用GetO场ect函数打开已存在的对象引用:


Set AppExcel=GetObject("SAMP.XLS")
  上面语句打开文件SAMP.XLS。

  3、Application对象常用的属性、方法


属性、方法 方法 Visible属性 取True或False,表明Excel应用程序是否可见。 Left,Top属性 Excel窗口的位置; Height, Width属性 Excel窗口的大小; WindowState属性 指定窗口的状态,取:XIMaximized(最大化)X1 Minimized(最小化)x1 Normal(缺省)。 Quit方法 退出Microsoft Excel; Calculate方法 重新计算所有打开的工作簿、工作表或单元格。 Evaluate方法 求值数学表达式并返回结果。
  示例1:求值数学表达式:


Dim VBExcel As Object
Set VBExcel=CreateObject ("Excel.Application")
X=VBExcel. Evaluate ("3+5*(cos (1/log (99. 9)))")  

采用hub共享adsl上网

这样设置试一下:
1、设备连接成功后,在winxp机器上右击“网上邻居”,在网络属性中应

该有两个连接,其中一个是本地连接,一个是ADSL拨号连接。


2、在保证本机ADSL能拨号成功的前提下,打开ADSL拨号连接的属性页,在

“高级”页中选中“允许其他网络用户通过此计算机的internet连接来连接”

和“在我的网络上的计算机尝试访问internet时建立一个拨号连接”。


3、此时计算机会提示,如果启用此连接的internet连接共享,会自动将本

地连接的IP地址置为:192.168.0.1,与internet的连接可能会失效。不用管它

的警告,点“是”就行。


4、然后,重新启动机器,此时,在我们建立的ADSL拨号连接上出现了一个

共享的标记:一只手托着这个连接,说明共享已经打开。接下来就准备欣赏我

们劳动的成果吧!


5、网内其它电脑ip地址设置为:192.168.0.2-254,网关:192.168.0.1;DNS:通过在运行中:cmd-ipconfig/all(一定要填写DSN,如果找到不到,则通过"注"的操作后,重启,然后登陆网络,再cmf/ipconfig/all,就行了)得知,有两个;只要这台winxp的机器先拨号上网,其它电脑直接点击IE浏览器即可同时上网。 注:若还有问题,可在网络邻居中"设置家庭局域网"中设置设置.允许网内其他计算机通过本计算机连接internet.最后选择"windowxp cd"项.就可以了  

EXCEL应用之一_描述统计工具

描述统计工具
对于一组数据(即样本观察值),要想获得它们的一些常用统计量,可以使用Excel 2000提供的统计函数来实现。例如AVERAGE(平均值)、STDEV(样本标准差)、VAR(样本方差)、KURT(峰度系数)、SKEW(偏度系数)、MEDIAN(中位数,即在一组数据中居于中间的数)、MODE(众数,即在一组数据中出现频率最高的数值)等。但最方便快捷的方法是利用Excel 2000提供的描述统计工具,它可以给出一组数据的许多常用统计量,包括: 平均值 标准差 区域 计数 标准误差 样本方差 最大值 第K个最大值 中值(中位数) 峰值(样本峰度) 最小值 第K个最小值 模式(众数) 偏斜度(样本偏度) 总和 置信度 注:若工具菜单中没有"数据分析"项,请从"加载宏"中选择安装  

matlab 使用的一点儿体会(for beginner) (转载)

真正接触matlab一年左右,我很喜欢上了matlab的简单的语法,易于绘制图形,gui编程也非常容易, 并且功能强大的开放式的toolbox。因此,尽管我一直没有这方面的应用,但是我还是对它非常感兴趣。 现将个人的matlab的一点学习体会列在这里,愿能够对大家(特别是初学者)起到一点儿微薄的作用也好。 1. help:最有效的命令(参阅了瀚海mathtools的 starrynight网友的文章)其实,可以这样说吧,如果离开matlab软件,我想我自己是基本上什么都不会。一遇到什么问题,通常 我的第一反应是:help ,就先说说自己对help的一些常用方法吧。 1)命令窗口直接敲“help”,你就可以得到本地机器上matlab的基本的帮助信息。 2)对于某些不是很明确的命令,只知道大体所属范围,譬如说某个工具箱,直接在命令窗口中敲入 help toolboxname,一帮可以得到本工具箱有关的信息:版本号,函数名等。 3)知道函数名,直接用help funname就可以得到相应的帮助信息。 2. see also:不可小瞧的关联在用help命令的时候,可能因为我们开始估计的方向不一定完全正确,在列出的帮助信息中没有直接给出的我们要找的东西,但是我们一定不要忽略了在帮助的最后列出的see also。譬如:曾经遇到一个画椭球的问题。刚开始我以为这个命令函数应该在graph3d中给出的(顺带提一句,只用help的时候我们就可以看到matlab\graph3d - Three dimensional graphs. 。于是乎,我又 help graph3d,很遗憾,在 Elementary 3-D plots.中我没有发现画椭球的函数,但是我发现在see also中 有SPECGRAPH. 抱着试试的态度,我又help specgraph,^_^,这次在 Solid modeling中找到了 ellipsoid - Generate ellipsoid。 3. lookfor: matlab中的google 当我们很多什么头绪都没有的时候,我们可以求助于它,往往会收到意想不到的效果。譬如:曾经在gui编程的时候,遇到过这样一个问题:想拖动鼠标时,要出现一个方框,就像你在桌面上拖动鼠标,会出现虚线框一样。当初我也刚开始一定都不知道该查找什么东西,后来想起用它了。于是乎, >> lookfor Rectangle (很不好意思,当时这个矩形我还是在金山词霸中搞定的-_-)。果然,在其中就找到这样一条信息:GETRECT Select rectangle with mouse.^_^ 4. get,set: GUI object 属性的帮手在GUI编程中,我们可能有时候想改变某些object的属性,或者想让它安装自己的想法实现,但是我们又不记得这些object的属性,更别提怎么设置他们的值了。这时,可以用 get(handles)得到此对象的所有的属性及其当前值。用set(handles)可以得到对象所有可以设置的属性及其可能的取值。找到我们需要的属性名字和可能的取值之后,就意义用 get(handles,‘propertyname’)取得此属性的值,用set(handles,‘propertyname’,values)设置此对象此属性的值。 5. Edit: 查看m源文件的助手在应用matlab过程中,可能我们想看看它的m源文件,当然用editor定位打开也行,但是我经常采用的式直接在command窗口中用edit funname.m,就省去了定位的麻烦。 6. 其他常用命令:which,what等 which:定位指定的函数和文件,最好带上参数-all,以便显示更加多的信息 what: 获得指定目录的m文件,mex文件以及mat文件名列表 7. 各个高校bbs的mathtools版谁都不可能什么都懂,但是永远记住这样一句话:Two heads are better than one. 多向他人请教,多相 互讨论,这不只是在于解决matlab的问题上。我最经常去的bbs有: .瀚海星云(http://fbbs.ustc.edu.cn/)的mathtools版 .水木清华(http://www.smth.edu.cn/ver2.html)的mathtools版 .饮水思源(http://bbs.sjtu.edu.cn/)的mathtools版 .紫丁香 (http://bbs.hit.edu.cn/)的matlab版 8. 一些专业网站 我所知道的有: 1) http://www.mathworks.com mathworks的官方网站 2) http://www.mathtools.net/MATLAB/index.html 这里有很多好的工具箱或者小的辅助函数可以下载,不过是国外的,e文和网络对来说感觉都是很不爽的事情。 3) http://matlab.myrice.com/ Matlab大观园,估计只要在网上搜索过matlab资料的就不会不知道它,园主是东北大学的薛定宇教授,一直从事MATLAB语言及其应用研究。 4) http://passmatlab.myetang.com/MATLAB/INDEX.HTM 文宇工作室 5) http://sh.netsh.com/bbs/5186/ matlab语言与应用,薛定宇的一个论坛 6) http://www.matwav.com/resource/newlk.asp 中国学术交流园地,除了matlab有关外,还有很多其他的 专业的文章。最后一条,要大胆的去试,哪怕只有一丁点儿可能。譬如,早些时候,有朋友问我:我用什么命令可以查找所建立网络的属性的含义,比如说:我建立网络net=newff(minmax(p),[3,1], {'tansig','purelin'},'traingda');想看看net.trainParam。lr_inc属性是啥含义用什么命令查看呢?当时,我根本连练习都没有用matlab的神经网络工具箱的东西练习过。我help newff也没有结果,后来实在没有办法,就试着help参数值traingda,没有想到还居然真的就找到答案了。还有,曾经有朋友想把waitbar的默认颜色的红色改掉,我用help 没有发现可以改变其填充色的property,后来我看了waitbar.m,发现其填充色本来就不试一个可变参数,但是既然发现了是什么地方,就可以自己改变的,这都得益于matlab 的开放性。这也为我们提供了很大的灵活性(在他的基础上,我们可以做很少的变换,就自己写一个填充色可以以属性输入而改变的waitbar的)最后,matlab只是一个很好的应用工具而已,也不像vc,delphi,vb等开发工具,最多的还是应用于算法的验证,仿真等。我们应该的是尽可能的知道一点儿基础的,然后熟悉本专业的toolbox。(可惜,我现在一直没有这样的实际应用机会)

转载地址:http://genial.yculblog.com/post.13304.html