在VB6.0中实现动态统计报表
VB6中实现动态统计报表
在利用VB开发MIS系统的过程中,经常需要制作动态统计报表。
本文就如何实现动态数据源下的分组交叉统计报表进行阐述,并结合实例给出编程指导。
在VB6.0的数据环境设计器中,我们可以利用“添加命令”一项来连接报表所需的数据源,同时利用“添加命令”属性中的分组与合计功能设计分组交叉统计报表的数据源,至此我们可以设计简单的数据存在于单一表静态数据源下分组交叉报表,对于数据存在多表的复杂的动态数据源下的分组交叉报表来说,仍实现不了,实现该功能的关键在于构造一个符合动态数据源要求的中间表。
下面以一管理系统中工程成本统计报表的实例来说明如何实现动态数据源下的分组交叉统计报表。
一、报表要求与分析该报表要求列出在指定的时间段内实施的各项工程所耗器材明细、数量、费用,并且计算各项工程的成本,最终计算所有工程的累计成本。
需求分析后可知该报表是个典型的动态数据源下分组统计报表,分组项为工程名称,要求对每个分组进行子汇总和对所有分组进行总汇总。
由于在该系统中的出库单和出库单明细分别存放在不同的表中,因此必须根据报表的要求预先构造一个成本统计中间表,命名为EquipMentCost。
相关表结构如图1。
通过对表OutBill和OutBillDetail的分析,发现两者通过关键字OutBill 相联,下面通过SQL语句生成中间表EquipmentCost,语句如下:Insert into EquipmentCost(Project,Name,Standard,Type,Num,Cost)select a.project as 'Project', as 'Name',b.standard as 'Standard', b.type as 'Type',b.num aswhere a.OutDate>=date1 and a.OutDate<=date2date1 和date2 变量用来指定时间,注意插入前要先清空该中间表的所有数据。
VBA实现Excel的数据报表自动化
VBA实现Excel的数据报表自动化VBA(Visual Basic for Applications)是一种基于微软的Visual Basic编程语言的宏语言。
它广泛应用于Excel等微软办公套件中,可用于自动化处理各种任务。
本文将重点介绍如何使用VBA来实现Excel数据报表的自动化。
在Excel中,数据报表的制作通常需要手动操作,包括数据整理、格式设计、图表生成等。
但是,如果数据量较大或需要频繁更新,手动操作将非常繁琐且容易出错。
通过编写VBA宏,我们可以根据特定的需求一次性完成这些操作,实现数据报表的自动化生成。
首先,我们需要打开Excel,并在“开发工具”选项卡中启用“宏”。
然后,在“开发工具”选项卡中点击“Visual Basic”按钮,打开VBA编辑器。
1. 数据整理首先,我们需要将数据整理成适合报表生成的格式。
这可能包括数据筛选、排序、合并等操作。
例如,如果我们有一个包含销售数据的工作表,其中列A包含产品名称,列B包含销售额,列C包含销售量。
我们可以使用VBA宏将数据按产品名称进行汇总,并计算每个产品的总销售额和总销售量。
```vbaSub 数据整理()Dim LastRow As LongDim ProdRange As RangeDim ProdName As StringDim TotalRevenue As DoubleDim TotalQty As Double' 获取最后一行的行号LastRow = Cells(Rows.Count, 1).End(xlUp).Row' 以第一行作为起始行Set ProdRange = Range("A2:C2")ProdName = Cells(2, 1).ValueTotalRevenue = Cells(2, 2).ValueTotalQty = Cells(2, 3).Value' 循环遍历数据For i = 3 To LastRow' 如果产品名称相同,累加销售额和销售量If Cells(i, 1).Value = ProdName ThenTotalRevenue = TotalRevenue + Cells(i, 2).ValueTotalQty = TotalQty + Cells(i, 3).ValueElse' 如果产品名称不同,写入汇总结果,并更新起始行和变量值 ProdRange.Offset(ProdRange.Rows.Count, 0).EntireRow.InsertProdRange.Offset(ProdRange.Rows.Count, 0).Value = ProdName ProdRange.Offset(ProdRange.Rows.Count, 1).Value = TotalRevenue ProdRange.Offset(ProdRange.Rows.Count, 2).Value = TotalQtySet ProdRange = ProdRange.Resize(ProdRange.Rows.Count + 1)ProdName = Cells(i, 1).ValueTotalRevenue = Cells(i, 2).ValueTotalQty = Cells(i, 3).ValueEnd IfNext i' 写入最后一组汇总结果ProdRange.Offset(ProdRange.Rows.Count, 0).EntireRow.InsertProdRange.Offset(ProdRange.Rows.Count, 0).Value = ProdNameProdRange.Offset(ProdRange.Rows.Count, 1).Value = TotalRevenueProdRange.Offset(ProdRange.Rows.Count, 2).Value = TotalQtyEnd Sub```以上代码将根据产品名称将销售数据进行汇总,并将汇总结果写入新的行。
VBA实现Excel图表自动更新与动态展示
VBA实现Excel图表自动更新与动态展示Excel是一款功能强大的电子表格软件,借助其图表功能,用户可以直观地展示数据,并随着数据的更新而自动更新图表。
在使用Excel图表时,VBA(Visual Basic for Applications)可以大大提升用户的工作效率,实现图表的自动更新与动态展示。
本文将介绍如何使用VBA编写代码,实现Excel图表的自动更新与动态展示。
首先,我们需要在Excel中创建一个图表,用于展示相应的数据。
接下来,我们将使用VBA编写代码,实现图表的自动更新。
1. 打开VBA编辑器在Excel中按下“ALT + F11”,即可打开VBA编辑器。
2. 创建宏在VBA编辑器的窗口中,可以看到“项目资源管理器”和“属性窗口”。
在“项目资源管理器”中,双击“这台电脑”或者右键点击“这台电脑”,选择“插入”-“模块”,即可创建一个新的模块。
在模块中,编写以下代码:```vbaSub UpdateChart()Dim chart As ChartObjectDim dataRange As RangeSet chart = Sheets("Sheet1").ChartObjects("Chart 1")Set dataRange = Sheets("Sheet1").Range("A1:B10") '这里的数据范围需根据实际情况进行调整chart.Chart.SetSourceData dataRangeEnd Sub```上述代码中,我们使用了“UpdateChart”作为宏的名称。
首先,我们定义了两个变量,一个是“chart”,用于存储图表对象;另一个是“dataRange”,用于存储数据范围。
然后,我们使用“Set”关键字将图表对象和数据范围分别赋值给这两个变量。
最后,使用“SetSourceData”方法将数据范围应用到图表中。
通过VBA实现Excel数据报表的制作方法
通过VBA实现Excel数据报表的制作方法Excel是一个功能强大的电子表格应用程序,可以用来处理和分析数据。
在Excel中,使用VBA(Visual Basic for Applications)语言可以自动化执行各种任务和操作。
通过VBA,我们可以实现Excel数据报表的制作方法,提高工作效率和准确性。
本文将介绍通过VBA实现Excel数据报表的步骤和技巧。
首先,需要了解VBA编程语言的基本知识。
VBA是一种基于Microsoft Visual Basic的编程语言,可以用于编写Excel宏。
在Excel菜单栏上,选择“开发”选项卡,然后点击“Visual Basic”图标,即可进入VBA编辑器。
在VBA编辑器中,可以编写和编辑宏代码。
接下来,我们将探讨几种常用的VBA编程技巧,以实现Excel数据报表的制作方法。
第一种方法是使用VBA自动创建并格式化表格。
在VBA编辑器中,可以使用Range对象和Cells属性来指定单元格范围和位置。
例如,可以使用Cells(row, column)来指定特定单元格的位置,并使用Range("A1:G10")来指定一个单元格区域。
通过设置单元格的值、字体、颜色等属性,可以实现表格的自动创建和格式化。
第二种方法是使用VBA自动填充数据。
通过循环和条件语句,在VBA中可以自动获取数据源,并将数据填充到指定的单元格中。
例如,可以使用For循环来遍历数据源,并使用If语句来判断数据的条件,然后将符合条件的数据填充到相应的单元格中。
这样可以快速、准确地填充大量数据。
第三种方法是使用VBA自动计算和统计数据。
通过对数据进行加减乘除等运算,并使用函数来进行统计和分析,可以实现数据报表的自动计算。
例如,可以使用Sum函数来计算一列数据的总和,使用Average函数来计算平均值,使用Count函数来统计某个条件下的数据数量等。
通过编写相应的VBA代码,可以根据需要自动计算和统计各种数据指标。
用VB操作EXCEL(VB6.0)(整理)
用VB操作Excel(VB6.0)(整理)全面控制Excel:首先创建Excel对象,使用ComObj:Dim ExcelID as Excel.ApplicationSet ExcelID as new Excel.Application1)显示当前窗口:ExcelID.Visible:=True;2)更改Excel标题栏:ExcelID.Caption:='应用程序调用MicrosoftExcel';3)添加新工作簿:ExcelID.WorkBooks.Add;4)打开已存在的工作簿:ExcelID.WorkBooks.Open('C:\Excel\Demo.xls');5)设置第2个工作表为活动工作表:ExcelID.WorkSheets[2].Activate;或ExcelID.WorkSheets['Sheet2'].Activate;6)给单元格赋值:ExcelID.Cells[1,4].Value:='第一行第四列';7)设置指定列的宽度(单位:字符个数),以第一列为例:ExcelID.ActiveSheet.Columns[1].ColumnsWidth:=5;8)设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:ExcelID.ActiveSheet.Rows[2].RowHeight:=1/0.035;//1厘米9)在第8行之前插入分页符:ExcelID.WorkSheets[1].Rows[8].PageBreak:=1;10)在第8列之前删除分页符:ExcelID.ActiveSheet.Columns[4].PageBreak:=0;11)指定边框线宽度:ExcelID.ActiveSheet.Range['B3:D4'].Borders[2].Weight:=3;1-左2-右3-顶4-底5-斜(\)6-斜(/)12)清除第一行第四列单元格公式:ExcelID.ActiveSheet.Cells[1,4].ClearContents;13)设置第一行字体属性:ExcelID.ActiveSheet.Rows[1]:='隶书'; ExcelID.ActiveSheet.Rows[1].Font.Color:=clBlue; ExcelID.ActiveSheet.Rows[1].Font.Bold:=True;ExcelID.ActiveSheet.Rows[1].Font.UnderLine:=True;14)进行页面设置:a.页眉:ExcelID.ActiveSheet.PageSetup.CenterHeader:='报表演示'; b.页脚:ExcelID.ActiveSheet.PageSetup.CenterFooter:='第&P页';c.页眉到顶端边距2cm:ExcelID.ActiveSheet.PageSetup.HeaderMargin:=2/0.035; d.页脚到底端边距3cm:ExcelID.ActiveSheet.PageSetup.HeaderMargin:=3/0.035; e.顶边距2cm:ExcelID.ActiveSheet.PageSetup.TopMargin:=2/0.035;f.底边距2cm:ExcelID.ActiveSheet.PageSetup.BottomMargin:=2/0.035; g.左边距2cm:ExcelID.ActiveSheet.PageSetup.LeftMargin:=2/0.035;h.右边距2cm:ExcelID.ActiveSheet.PageSetup.RightMargin:=2/0.035;i.页面水平居中:ExcelID.ActiveSheet.PageSetup.CenterHorizontally:=2/0.035; j.页面垂直居中:ExcelID.ActiveSheet.PageSetup.CenterVertically:=2/0.035; k.打印单元格网线:ExcelID.ActiveSheet.PageSetup.PrintGridLines:=True;15)拷贝操作:a.拷贝整个工作表:ed.Range.Copy;b.拷贝指定区域:ExcelID.ActiveSheet.Range['A1:E2'].Copy;c.从A1位置开始粘贴:ExcelID.ActiveSheet.Range.['A1'].PasteSpecial;d.从文件尾部开始粘贴:ExcelID.ActiveSheet.Range.PasteSpecial;16)插入一行或一列:a.ExcelID.ActiveSheet.Rows[2].Insert;b.ExcelID.ActiveSheet.Columns[1].Insert;17)删除一行或一列:a.ExcelID.ActiveSheet.Rows[2].Delete;b.ExcelID.ActiveSheet.Columns[1].Delete;18)打印预览工作表:ExcelID.ActiveSheet.PrintPreview;19)打印输出工作表:ExcelID.ActiveSheet.PrintOut;20)工作表保存:IfnotExcelID.ActiveWorkBook.SavedthenExcelID.ActiveSheet.PrintPreviewEndif21)工作表另存为:ExcelID.SaveAs('C:\Excel\Demo1.xls');22)放弃存盘:ExcelID.ActiveWorkBook.Saved:=True;23)关闭工作簿:ExcelID.WorkBooks.Close;24)退出Excel:ExcelID.Quit;25)设置工作表密码:ExcelID.ActiveSheet.Protect"123",DrawingObjects:=True,Contents:=True,Scenarios:=True 26)EXCEL的显示方式为最大化ExcelID.Application.WindowState=xlMaximized27)工作薄显示方式为最大化ExcelID.ActiveWindow.WindowState=xlMaximized28)设置打开默认工作薄数量ExcelID.SheetsInNewWorkbook=329)'关闭时是否提示保存(true保存;false不保存)ExcelID.DisplayAlerts=False30)设置拆分窗口,及固定行位置ExcelID.ActiveWindow.SplitRow=1ExcelID.ActiveWindow.FreezePanes=True31)设置打印时固定打印内容ExcelID.ActiveSheet.PageSetup.PrintTitleRows="$1:$1"32)设置打印标题ExcelID.ActiveSheet.PageSetup.PrintTitleColumns=""33)设置显示方式(分页方式显示)ExcelID.ActiveWindow.View=xlPageBreakPreview34)设置显示比例ExcelID.ActiveWindow.Zoom=10035)让Excel响应DDE请求Ex.Application.IgnoreRemoteRequests=False用VB操作EXCEL示例代码Private Sub Command3_Click()On Error GoTo err1Dim i As LongDim j As LongDim objExl As Excel.Application'声明对象变量Me.MousePointer=11'改变鼠标样式Set objExl=New Excel.Application'初始化对象变量objExl.SheetsInNewWorkbook=1'将新建的工作薄数量设为1objExl.Workbooks.Add'增加一个工作薄objExl.Sheets(objExl.Sheets.Count).Name="book1"'修改工作薄名称objExl.Sheets.Add,objExl.Sheets("book1")‘增加第二个工作薄在第一个之后objExl.Sheets(objExl.Sheets.Count).Name="book2"objExl.Sheets.Add,objExl.Sheets("book2")‘增加第三个工作薄在第二个之后objExl.Sheets(objExl.Sheets.Count).Name="book3"objExl.Sheets("book1").Select'选中工作薄<book1>For i=1To50'循环写入数据For j=1To5If i=1ThenobjExl.Selection.NumberFormatLocal="@"'设置格式为文本objExl.Cells(i,j)="E"&i&jElseobjExl.Cells(i,j)=i&jEndIfNextNextobjExl.Rows("1:1").Select'选中第一行objExl.Selection.Font.Bold=True'设为粗体objExl.Selection.Font.Size=24'设置字体大小objExl.Cells.EntireColumn.AutoFit'自动调整列宽objExl.ActiveWindow.SplitRow=1'拆分第一行objExl.ActiveWindow.SplitColumn=0'拆分列objExl.ActiveWindow.FreezePanes=True'固定拆分objExl.ActiveSheet.PageSetup.PrintTitleRows="$1:$1"'设置打印固定行objExl.ActiveSheet.PageSetup.PrintTitleColumns=""'打印标题objExl.ActiveSheet.PageSetup.RightFooter="打印时间:"&_Format(Now,"yyyy年mm月dd日hh:MM:ss")objExl.ActiveWindow.View=xlPageBreakPreview'设置显示方式objExl.ActiveWindow.Zoom=100'设置显示大小'给工作表加密码objExl.ActiveSheet.Protect"123",DrawingObjects:=True,_ Contents:=True,Scenarios:=TrueobjExl.Application.IgnoreRemoteRequests=FalseobjExl.Visible=True'使EXCEL可见objExl.Application.WindowState=xlMaximized'EXCEL的显示方式为最大化objExl.ActiveWindow.WindowState=xlMaximized'工作薄显示方式为最大化objExl.SheetsInNewWorkbook=3'将默认新工作薄数量改回3个Set objExl=Nothing'清除对象Me.MousePointer=0'修改鼠标ExitSuberr1:objExl.SheetsInNewWorkbook=3objExl.DisplayAlerts=False'关闭时不提示保存objExl.Quit'关闭EXCELobjExl.DisplayAlerts=True'关闭时提示保存Set objExl=NothingMe.MousePointer=0End SubPrivate Sub Command3_Click()On Error GoTo err1Dim i As LongDim j As LongDim objExl As Excel.Application'声明对象变量Me.MousePointer=11'改变鼠标样式Set objExl=New Excel.Application'初始化对象变量objExl.SheetsInNewWorkbook=1'将新建的工作薄数量设为1objExl.Workbooks.Add'增加一个工作薄objExl.Sheets(objExl.Sheets.Count).Name="book1"'修改工作薄名称objExl.Sheets.Add,objExl.Sheets("book1")'增加第二个工作薄在第一个之后objExl.Sheets(objExl.Sheets.Count).Name="book2"objExl.Sheets.Add,objExl.Sheets("book2")'增加第三个工作薄在第二个之后objExl.Sheets(objExl.Sheets.Count).Name="book3"objExl.Sheets("book1").Select'选中工作薄<book1>For i=1To50'循环写入数据For j=1To5If i=1ThenobjExl.Selection.NumberFormatLocal="@"'设置格式为文本objExl.Cells(i,j)="E"&i&jElseobjExl.Cells(i,j)=i&jEnd IfNextNextobjExl.Rows("1:1").Select'选中第一行objExl.Selection.Font.Bold=True'设为粗体objExl.Selection.Font.Size=24'设置字体大小objExl.Cells.EntireColumn.AutoFit'自动调整列宽objExl.ActiveWindow.SplitRow=1'拆分第一行objExl.ActiveWindow.SplitColumn=0'拆分列objExl.ActiveWindow.FreezePanes=True'固定拆分objExl.ActiveSheet.PageSetup.PrintTitleRows="$1:$1"'设置打印固定行objExl.ActiveSheet.PageSetup.PrintTitleColumns=""'打印标题objExl.ActiveSheet.PageSetup.RightFooter="打印时间:"&_Format(Now,"yyyy年mm月dd日hh:MM:ss")objExl.ActiveWindow.View=xlPageBreakPreview'设置显示方式objExl.ActiveWindow.Zoom=100'设置显示大小'给工作表加密码objExl.ActiveSheet.Protect"123",DrawingObjects:=True,_Contents:=True,Scenarios:=TrueobjExl.Application.IgnoreRemoteRequests=FalseobjExl.Visible=True'使E XCEL可见objExl.Application.WindowState=xlMaximized'EXCEL的显示方式为最大化objExl.ActiveWindow.WindowState=xlMaximized'工作薄显示方式为最大化objExl.SheetsInNewWorkbook=3'将默认新工作薄数量改回3个Set objExl=Nothing'清除对象Me.MousePointer=0'修改鼠标Exit Suberr1:objExl.SheetsInNewWorkbook=3objExl.DisplayAlerts=False'关闭时不提示保存objExl.Quit'关闭EXCELobjExl.DisplayAlerts=True'关闭时提示保存Set objExl=NothingMe.MousePointer=0End Sub=====================================全面控制Excel首先创建Excel对象,使用ComObj:Dim ExcelID as Excel.ApplicationSet ExcelID as new Excel.Application1)显示当前窗口:ExcelID.Visible:=True;2)更改Excel标题栏:ExcelID.Caption:='应用程序调用Microsoft Excel';3)添加新工作簿:ExcelID.WorkBooks.Add;4)打开已存在的工作簿:ExcelID.WorkBooks.Open('C:\Excel\Demo.xls');5)设置第2个工作表为活动工作表:ExcelID.WorkSheets[2].Activate;或ExcelID.WorkSheets['Sheet2'].Activate;6)给单元格赋值:ExcelID.Cells[1,4].Value:='第一行第四列';7)设置指定列的宽度(单位:字符个数),以第一列为例:ExcelID.ActiveSheet.Columns[1].ColumnsWidth:=5;8)设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:ExcelID.ActiveSheet.Rows[2].RowHeight:=1/0.035;//1厘米9)在第8行之前插入分页符:ExcelID.WorkSheets[1].Rows[8].PageBreak:=1;10)在第8列之前删除分页符:ExcelID.ActiveSheet.Columns[4].PageBreak:=0;11)指定边框线宽度:ExcelID.ActiveSheet.Range['B3:D4'].Borders[2].Weight:=3;1-左2-右3-顶4-底5-斜(\)6-斜(/)12)清除第一行第四列单元格公式:ExcelID.ActiveSheet.Cells[1,4].ClearContents;13)设置第一行字体属性:ExcelID.ActiveSheet.Rows[1]:='隶书';ExcelID.ActiveSheet.Rows[1].Font.Color:=clBlue;ExcelID.ActiveSheet.Rows[1].Font.Bold:=True;ExcelID.ActiveSheet.Rows[1].Font.UnderLine:=True;14)进行页面设置:a.页眉:ExcelID.ActiveSheet.PageSetup.CenterHeader:='报表演示';b.页脚:ExcelID.ActiveSheet.PageSetup.CenterFooter:='第&P页';c.页眉到顶端边距2cm:ExcelID.ActiveSheet.PageSetup.HeaderMargin:=2/0.035;d.页脚到底端边距3cm:ExcelID.ActiveSheet.PageSetup.HeaderMargin:=3/0.035;e.顶边距2cm:ExcelID.ActiveSheet.PageSetup.TopMargin:=2/0.035;f.底边距2cm:ExcelID.ActiveSheet.PageSetup.BottomMargin:=2/0.035;g.左边距2cm:ExcelID.ActiveSheet.PageSetup.LeftMargin:=2/0.035;h.右边距2cm:ExcelID.ActiveSheet.PageSetup.RightMargin:=2/0.035;i.页面水平居中:ExcelID.ActiveSheet.PageSetup.CenterHorizontally:=2/0.035;j.页面垂直居中:ExcelID.ActiveSheet.PageSetup.CenterVertically:=2/0.035;k.打印单元格网线:ExcelID.ActiveSheet.PageSetup.PrintGridLines:=True;15)拷贝操作:a.拷贝整个工作表:ed.Range.Copy;b.拷贝指定区域:ExcelID.ActiveSheet.Range['A1:E2'].Copy;c.从A1位置开始粘贴:ExcelID.ActiveSheet.Range.['A1'].PasteSpecial;d.从文件尾部开始粘贴:ExcelID.ActiveSheet.Range.PasteSpecial;16)插入一行或一列:a.ExcelID.ActiveSheet.Rows[2].Insert;b.ExcelID.ActiveSheet.Columns[1].Insert;17)删除一行或一列:a.ExcelID.ActiveSheet.Rows[2].Delete;b.ExcelID.ActiveSheet.Columns[1].Delete;18)打印预览工作表:ExcelID.ActiveSheet.PrintPreview;19)打印输出工作表:ExcelID.ActiveSheet.PrintOut;20)工作表保存:If not ExcelID.ActiveWorkBook.Saved thenExcelID.ActiveSheet.PrintPreviewEnd if21)工作表另存为:ExcelID.SaveAs('C:\Excel\Demo1.xls');22)放弃存盘:ExcelID.ActiveWorkBook.Saved:=True;23)关闭工作簿:ExcelID.WorkBooks.Close;24)退出Excel:ExcelID.Quit;25)设置工作表密码:ExcelID.ActiveSheet.Protect"123",DrawingObjects:=True,Contents:=True,Scena rios:=True26)EXCEL的显示方式为最大化ExcelID.Application.WindowState=xlMaximized27)工作薄显示方式为最大化ExcelID.ActiveWindow.WindowState=xlMaximized28)设置打开默认工作薄数量ExcelID.SheetsInNewWorkbook=329)'关闭时是否提示保存(true保存;false不保存)ExcelID.DisplayAlerts=False30)设置拆分窗口,及固定行位置ExcelID.ActiveWindow.SplitRow=1ExcelID.ActiveWindow.FreezePanes=True31)设置打印时固定打印内容ExcelID.ActiveSheet.PageSetup.PrintTitleRows="$1:$1"32)设置打印标题ExcelID.ActiveSheet.PageSetup.PrintTitleColumns=""33)设置显示方式(分页方式显示)ExcelID.ActiveWindow.View=xlPageBreakPreview34)设置显示比例ExcelID.ActiveWindow.Zoom=10035)让Excel响应DDE请求Ex.Application.IgnoreRemoteRequests=FalseVB程序操作Excel数据的代码示例一、VB读写EXCEL表VB本身提自动化功能可以读写EXCEL表,其方法如下:①在工程中引用Microsoft Excel类型库从"工程"菜单中选择"引用"栏;选择Microsoft Excel9.0Object Library(EXCEL2000),然后选择"确定"。
Vb 6.0 中DATAREPORT 的使用
Vb 6.0 中DATAREPORT 的使用一、打开VB6.0新建一“标准EXE”工程二、在“工程”菜单上,单击“添加DATA ENVIROMENT”向工程中一个设计器,此处为添加DATA ENVIROMENT1数据环境。
三、在弹出的工程1窗口中右键点击“CONNECTION1”,在弹出菜单中选择“属性”弹出数据链接属性窗体,在“提供程序”中选择自己的数据库环境。
如MICROSOFT OLE DB PROVIDER FOR SQL SERVER,点选下一步,选择自己的服务器、用户和密码,数据库等。
四、右键单击“CONNECTION1”,在弹出的菜单中选择“添加命令”,添加一个命令为COMMNAD1,右键单击“COMMNAD1”,在弹出菜单选择属性,在属性窗口的“通用”中对命令进行命名和连接的设置。
对数据源进行表的选择,“数据库对象”选择“表”,“对象名称”中选择你数据库中的表。
点击确定完成。
五、右键单击“COMMNAD1”,在弹出菜单中选择“添加子命令”,添加子命令为COMMAND2,右键单击“COMMNAD2”,在弹出菜单选择属性,在属性窗口的“通用”中对命令进行命名和连接的设置。
对数据源进行表的选择,“数据库对象”选择“表”,“对象名称”中选择你数据库中的表,再在“关联”项中对COMMAND1与COMMAND2的关联项进行设置,也就是此两表都有的关联字段,点“添加”进行添加。
最后点击确定完成。
六、创建数据报表DATAREPORT。
在“工程”菜单上,单击“添加DATA REPORT”向工程中一个数据报表DATAREPORT1。
在DATAREPORT1的属性窗口中,更改其DATASOURCE 为DATAENVIRONMENT1,DATAMEMBER 为COMMAND1。
七、右键单击数据报表设计器窗体,在弹出菜单上单击“检索结构”。
八、从数据环境设计器DATA ENVIROMENT1中拖动COMMAND1中几个需要的字段到DATA REPORT的“分组标头”中。
用VB和VBA实现动态报表
万方数据 万方数据用VB和VBA实现动态报表作者:刘波, 崔维, 陈闳中作者单位:同济大学,计算机科学与工程系,上海,200092刊名:计算机应用研究英文刊名:APPLICATION RESEARCH OF COMPUTERS年,卷(期):2002,19(6)被引用次数:10次1.HARRISM Visual Basic for Application开发人员指南 19982.蒋廷耀;杨薇薇用VBA、OLE技术增强MIS系统的开放性[期刊论文]-计算机工程 2001(04)3.钟一文VB中结合Excel进行报表制作及报表的Internet传递[期刊论文]-计算机应用研究 2001(08)4.MSDN Library Visual Studio 6.0(Visual Basic文档)5.庄孝昆基于VFP6.0和Excel2000的通用报表系统的实现[期刊论文]-计算机应用研究 2001(02)1.李小军.Li Xiaojun VBA实现EXCEL数据录入有效性检查[期刊论文]-电脑学习2009(6)2.李文江.LI Wen-jiang VBA在PowerPoint课件中的应用[期刊论文]-重庆文理学院学报(自然科学版)2006,5(1)3.王亚利.李井竹.WANG Ya-li.LI Jing-zhu Word操作题自动阅卷技术的研究与实现[期刊论文]-宁波职业技术学院学报2009,13(2)4.肖飞.刘耿龙.眭伟芳.XIAO Fei.LIU Geng-long.SUI Wei-fang Excel学籍信息自定义函数库的开发[期刊论文]-电脑知识与技术2010,06(21)5.尹咏梅调用Word实现计量证书的自动生成[期刊论文]-中国计量2005(8)6.焦爱俊.尹侠.Jiao Aijun.Yin Xia利用存储过程和OLE自动化实现动态报表[期刊论文]-南京化工大学学报(自然科学版)2001,23(2)7.殷维刚.尹凤仪.李和平.焦佩利.YIN Weigang.YIN Fengyi.LI Heping.JIAO Peili基于.NET平台的Word数据自动交换管理技术应用[期刊论文]-现代电子技术2005,28(15)8.邰建华Visual Basic中动态报表的研究与实现[期刊论文]-绥化师专学报2004,24(2)9.刘静VBA在Excel中的应用[期刊论文]-科技信息2009(8)10.吕振洪.周全Delphi与Excel的快速数据接口[期刊论文]-自动化技术与应用2001,1(2)1.桑银邦.王成良XML数据交换在Office二次开发中的应用[期刊论文]-计算机工程 2010(22)2.白海燕利用VBA快速开发现刊阅览管理工具[期刊论文]-现代图书情报技术 2004(3)3.余磊.刘顺高校毕业生信息采集数据规范性检测的VBA实现[期刊论文]-滁州学院学报 2012(5)4.郁云.魏瑾.杨波.邵定宏基于OWC的柔性动态报表生成器的设计与实现[期刊论文]-计算机应用与软件 2009(12)5.孟军齐.杨信丰.刘林忠.李引珍混合打印接口应用程序研究[期刊论文]-计算机应用研究 2004(9)6.毛一凡.姚景顺专业技术考核自动出卷系统的数据库开发[期刊论文]-计算机应用研究 2003(8)7.张静靖.韩硕.许军红.罗湘蜀.刘润友.蔺鸿.康殿巨传染病监测分析报告的WORD文档自动生成[期刊论文]-预防医学情报杂志 2010(5)8.金良锋.周文祥WORD试验报告的自动生成[期刊论文]-中国测试技术 2007(4)9.禹莲辉期刊动态管理监测系统的设计与实现[期刊论文]-大学图书情报学刊 2006(3)10.洪慧基于PI数据库的电厂SIS系统的报表组态优化及信息交换技术的研究[学位论文]硕士 2005引用本文格式:刘波.崔维.陈闳中用VB和VBA实现动态报表[期刊论文]-计算机应用研究 2002(6)。
在VB中用数据报表设计器创建报表
在VB中用数据报表设计器创建报表数据环境设计器(Data Environment designer)与数据报表设计器(Data Report designer)均是Visual Basic 6.0的新增功能,它们的出现大大增强了Visual Basic处理数据的能力。
在以往的Visual Basic版本中,制作报表都是通过第三方产品来完成并通过ActiveX控件输出的。
这两种设计器的出现,使得Visual Basic程序员再也不用考虑选择一个什么样的第三方工具设计报表了,所有的设计全部在Visual Basic内部完成,再加上Visual Basic 6.0新增的开发IIS应用程序和开发DHTML应用程序功能,使得Visual Basic 6.0是一个名副其实的装备齐全的集成开发环境了。
下面我们以一个比较简单的报表为例,详细阐述如何使用数据环境设计器和数据报表设计器来设计一个数据报表。
一、数据环境设计器与数据报表设计器数据环境设计器提供了一个交互式的设计环境。
通过设置Connection对象和Command 对象的属性,可以快速完成到一个数据源的连接。
对于设置好的数据环境设计器,可以将它的对象拖放到表单上或是报表上,它会自动创建并完成数据绑定控件的设置。
数据报表设计器是一个极为灵活的设计报表的工具。
它以数据环境设计器作为数据源,能创建有层次的、汇总若干个关系型数据表数据的复杂报表。
除了像传统的报表设计工具那样能将报表通过打印机输出以外,数据报表设计器还能以HTML或文本文件的格式输出报表。
二、数据环境对象数据环境设计器包含以下几个对象:1. 数据连接(Connection)对象:连接对象表示到一个作为数据源的远端数据库或本地数据库的连接。
在数据环境中必须至少包含一个连接对象,要使用数据环境存取数据,必须首先创建连接对象。
2. 数据命令(Command)对象:命令对象定义了从数据库连接中将取回什么数据的详细信息。
用VB和VBA实现动态报表
把 查 询 模 块 得 到 的 查 询 结 果 打 印 出来 : 查 询 模 块 由另 外一个 合作 者完 成, 模块 完 成得很 好 , 户 可 以 自由 该 用
地 选 择 需 要 查 询 的 表 、 段 . 终 将 查 询 结 果 显 示 在 一 字 最 个 MS x r HeG i 件 中 : 由 于 查 询 的 灵 活 性 , 到 了 项 目 d控 受 组 成 员 以及 用 户 的一 致 好 评 。 可 是 , 给 笔 者 实 现 报 表 却 模 块 带 了很 大 的 困 难 : 困 难 之 处 就 在 于 查 询 结 果 的 动 态性 , 主要 表 现 在 : 1表 的 不 固 定 性 ; 2 字 段 本 身 的 可 () () 变性 ;3 字 段 个 数 的 可 变 性 。 因 此 , () VB中 自带 的 数 据
W n l ea a ̄
tet i o V A.A ls , eit h rt f B a t it w n m—
d e h w o gt 】c o fVBA n W od Ap H ∞ . uc o t e r ec deo i r p c Ke r s: VBA; Dv y wo d r Re o t D( m ̄ m l OLe d p r; r e S ' eCo e . - .
源 代 码 的 获 取 作 了一 十 简要 的 介 绍 。
关 键 词 :V A 动 态报 表 ; 文档 ; 泺代 码 B; 中 圈 法 分 类 号 :T 3 11 P 1.1 文 献标 识 码 :A 文 章 编 号 :10.6520 )6 100 0 139 (020 - 3-2 0
Re l e Dy a c Re o va VB a d VBA ai n mi p  ̄ i n z
在VB6.0中用数据报表设计器创建报表
检索数据 。在 数据 环境设计器 中可 以 台若干个数 据连接 包 (o 吐 ) c聃e 对象 . 但最少 要包 台一个连接 对象 。 一个连 接 对 象表示 与一个 作为数据潺 使用 的一个敷据库 的连 接 。 通
过 设置连接对 象的属性 , 以建 立与一 个数据源 的连接 。 可 在创建好一个 连接对象后 .还要在 数据环境 设计器中
Ho t e t p r t aa Re o t De in r i 6 0 w o Cr a e Re o t h D t p r sg e n VB .
l Yuil 血 du o i
Al z e  ̄ ' t a T i a e r ̄ ns te meh d o rai  ̄ rp r i sa r n d sg e l aa e vrn n e i e hs p p rpe t h to fc et n e ot w t d, e e i r a d d t n i me ta sO.r s h t n l o
() 4 有击 cn et ̄ 对象 , 弹出的捷捷菜 单中选 择 o neo i 在 添加命令 项, 舔加 一个 emu a l o d 对象; ( )右 击  ̄m s d 5 m J I对象 , a 在弹 出 的快捷 菜单 中选择 “ 属性 ” , 项 打开 “ m m n l e ad 属性 ” 话框 i 对 在 om a d o m n I属性 ”对话框 中, 将龠辱 对象 的名称 设 置为 em l d t选择 eml t J 为连接对象 . o mt S . l a o e l ̄ eo 基于表对象
N me D耻 k∞ t a =
上, 自动创建并完成数据绑定控件的设置。 下面以在 A o 2∞ 中创建 时数据库 为例 ,详细介绍 c蝴 o
如何在VBA中处理Excel的动态图表和数据透视表
如何在VBA中处理Excel的动态图表和数据透视表在Excel中,动态图表和数据透视表是非常强大的工具,可用于可视化和分析数据。
通过使用Visual Basic for Applications(VBA),我们可以进一步增强这些工具的功能。
本文将介绍如何在VBA中处理Excel的动态图表和数据透视表。
动态图表是可以根据数据的变化而自动更新的图表。
在VBA中,我们可以通过使用宏来创建和控制动态图表。
首先,我们需要选择一个数据区域作为图表的数据源。
然后,使用VBA代码创建一个新的图表对象,并将数据源绑定到图表中。
在图表对象创建后,我们可以使用VBA代码来更改图表的样式、布局和数据范围。
例如,我们可以使用VBA代码添加数据系列、设置坐标轴标签、更改图表类型等。
最后,我们可以使用VBA代码监视数据的变化,并在数据发生变化时更新图表。
以下是一个示例代码,演示了如何使用VBA创建一个简单的动态图表:```Sub CreateDynamicChart()Dim DataRange As RangeDim ChartObject As ChartObject' 选择数据源Set DataRange = Worksheets("Sheet1").Range("A1:B5")' 创建图表对象Set ChartObject = Worksheets("Sheet1").ChartObjects.Add(Left:=100,Width:=400, Top:=100, Height:=300)' 设置图表的数据源ChartObject.Chart.SetSourceData Source:=DataRange' 更改图表样式和布局ChartObject.Chart.ChartStyle = 3ChartObject.Chart.ChartTitle.Caption = "Dynamic Chart"' 添加数据系列ChartObject.Chart.SeriesCollection.NewSeriesChartObject.Chart.SeriesCollection(1).Values = DataRange.Columns(2) ChartObject.Chart.SeriesCollection(1).XValues = DataRange.Columns(1) ' 监视数据的变化并更新图表Application.OnEntryChange Target:=DataRange,Procedure:="UpdateDynamicChart"End SubSub UpdateDynamicChart()Dim ChartObject As ChartObject' 获取图表对象Set ChartObject = Worksheets("Sheet1").ChartObjects("Chart 1")' 更新图表ChartObject.Chart.RefreshEnd Sub```数据透视表是一种可以从大量数据中提取关键信息的强大工具。
Visual Basic6.0下数据库报表制作技巧
Visual Basic6.0下数据库报表制作技巧在运用Visual Basic编制MIS系统前台程序时,往往会需要处理大量的报表。
而这些报表的制作,在Visual Basic6.0出现之前,要么需要使用Print语句编写大量程序代码,要么选择诸如Seagate等第三方公司所提供的诸如Data Report等软件,而一旦真正使用这些没有本地化的软件或控件,程序员往往会遇到各种各样令人头疼不已的问题——或者是中文字体显示有所限制,或者是报表数据无法动态及时更新,或者所提供的数据处理或统计功能并不怎么适用。
所幸的是,MicroSoft推出的Visual Basic6.0专业版和企业版中包含一个全新的组件——Data Report Designer (DRD),运用这个报表设计器,我们可以将报表与数据环境对象或者是ActiveX数据对象直接关联,使得Visual Basic6.0下的报表设计效率得到空前提高。
下面,就本人在运用DRD进行报表程序设计所获得的心得与大家共同探讨一下。
一将DRD与DED(Data Enviroment Designer)结合。
这是运用DRD解决Visual Basic6.0报表处理最常用的一种方法,在Samples中有一个名为Prjnwind工程就是专门介绍如何使用结合使用DRD和DED的例子程序。
我们可以通过选择新工程中的Data Project类型就可以自动增加一个空的DED和DRD实例到Project explorer中,打开一个空DataReport实例将禁止工具栏中的General 窗体并在工具栏底添加一个DataReort按钮。
如下图:可以看到,DataReport的专用控件——RptLabel、RptTextBox、RptImage、RptLine、RptShape和RptFunction。
除了RptFunction,每个Rpt控件都可以在固有Visual Basic工具面板中找到对应的控件。
VB6.0用ADO对象动态创建数据库和表!
VB6.0用ADO对象动态创建数据库和表!摘要:本文阐述了在VB程序中利用ADO对象动态创建数据库和数据表的方法,这些方法在开发VB数据库应用程序中很有实用价值,它可以提高数据库程序灵活性。
关键词:数据库、数据表、ADO、ADOX1: 问题的提出在Visual Basic中,常用的数据访问接口有下列三种:数据库访问对象(DAO,Data Access Object)、远程数据库对象(RDO,Remote Data Object)和ActiveX数据对象(ADO,ActiveX Data Object )。
数据库访问技术一直在不断进步,而这三种接口的每一种都分别代表了该技术的不同发展阶段。
最新的是ADO,它是比RDO和DAO更加简单,然而更加灵活的对象模型。
正因如此,越来越多的人在用VB开发数据库软件时使用ADO作为数据访问接口。
在开发过程中,我们通常的使用的方法是:先使用数据库管理系统(例如:Microsoft Access)或VB中的可视化数据管理器建立好数据库和数据表结构,然后在程序中通过使用ADODC数据库控件或引用ADO对象与数据库中的表建立连接,再通过数据库感知控件(例如:文本框、DataGrid等)来进行数据库的各种操作。
在这种开发过程中,我们有时需要面对这样一个问题:如何让用户在程序运行过程中动态地建立自己所需的数据库和数据表以提高程序的灵活性呢?在程序运行过程中建立自己所需的数据库和数据表,其本质就是用代码(或者说通过编程)来建立数据库和数据表。
众所周知,在Foxpro或ASP编程中,这是很容易的一件事件。
那么在VB数据库编程中又是怎样来操作的呢?在VB数据库编程中,如果使用DAO作为数据库访问接口技术,则可以用CreateDatabase结合CreateTableDef方法来实现,目前已有不少书和杂志都讲到了这种方法,本文就不再讲述了;但你如果使用的是最新的数据库访问接口技术ADO,你却发现目前的书和杂志上没有文章讲到如何用代码来建立数据库和数据表的方法,可有时我们非常需要用到这种方法,下面我们就来解决这个问题。
VBA 中的动态图表生成指南
VBA 中的动态图表生成指南随着信息时代的到来,数据处理变得越来越重要。
图表是一种有效的方式来表达和展示数据,它不仅可以提高数据的可读性,还可以帮助人们更好地理解数据背后的趋势和模式。
在数据处理过程中,自动生成动态图表是一种高效而强大的工具。
本文将介绍如何使用 VBA 生成动态图表,使您能够更好地掌握数据分析和可视化的技巧。
动态图表是指能够随着数据的更新而自动更新的图表。
VBA (Visual Basic for Applications)是一种用于自动化任务的编程语言,广泛应用于 Microsoft Office 软件中,包括 Excel、Word 和PowerPoint 等。
在 Excel 中使用 VBA 来生成动态图表可以极大地提高数据的分析效率。
首先,要生成动态图表,我们需要准备好数据。
在 Excel 中,表格是最常见的数据存储方式。
在一个表格中,每一列代表一个数据系列,每一行代表一个数据点。
确保数据的列和行都有合适的标签,并且数据是有序的。
接下来,打开 VBA 编辑器。
可以通过按下“Alt+F11”来快速打开 VBA 编辑器。
在 VBA 编辑器中,可以看到一个“Project Explo rer” 窗口和一个“Properties” 窗口。
我们需要在“ProjectExplorer” 窗口中找到并双击打开我们所要处理的 Excel 文件,这样就可以开始编写 VBA 代码了。
首先,我们需要创建一个新的模块来编写我们的 VBA 代码。
在“Project Explorer” 窗口中,右键点击 Excel 文件名,选择“Insert" -> "Module” 来创建一个新的模块。
在这个模块中,我们将编写生成动态图表所需的 VBA 代码。
首先,我们需要定义一些变量来存储我们将要使用的对象。
在VBA 中,使用“Dim” 来声明一个变量。
例如:```vbaDim wb As WorkbookDim ws As WorksheetDim rng As RangeDim cht As Chart```在这个例子中,我们声明了四个变量,分别代表工作簿(Workbook)、工作表(Worksheet)、区域(Range)和图表(Chart)。
VB利用DataReport做报表详解
首先介绍下DataReport对象几个常用属性是DataSource用于设置个数据源通过该数据源数据使用者被绑定到个数据库; 2是DataMember从DataSource提供几个数据成员中设置个特定数据成员;3是LeftMargin、RightMargin、TopMargin、BottomMargin等用于指定报表左右上下页边距; 4是Sections即DataaReport报表标头、页标头、细节、页脚注、报表脚注5个区域如果加上分组(可以有多层分组)则增加对区域即分组标头、分组脚注其中DataSource般是个数据环境或是ADODB.Connection类型变量而DataMember则对应数据环境中Command或是ADODB.RecordSet类型变量推荐使用数据环境及Command页边界大家肯定都很清楚下面我主要介绍以下Sections这也是DataReport精髓所在Sections是个集合您可以为每个Section指定名称也可以用其缺省索引从上到下依次为1、2…每个Section均有Height和Visible属性您可以在定条件下使个Section不可见在Section中可以放置各种报表Control控件其中RptLabel、RptImage、RptShape和RptLine可以放在任意Section中用于输出各种文字、图形及表格线;RptTextBox只能放在细节中般用于绑定输出DataMemeber提供数据字段;RptFunction只能被放置在分组注脚中,用于输出使用各种内置计算出合计、最大值、最小值、平均值、记数等等上述报表Control控件中常用公共属性有用于控制位置及高度宽度Top、Left、Height、Width和控制可见性Visible;其中RptTextBox还有DataField、DataMember、DataFormat及Font属性;其他属性不再多说然后介绍下我使用经验是对想控制报表Control控件按类型有规律命名; 2是用RptShape矩形框做表格线框比用RptLine画框省事多了只有斜线才使用RptLine; 3是报表标题及报表中表头文字、日期及页码用RptLabel其中Caption属性支持转义%D为长格式日期%d为短格式日期%P为总页数%p为当前页码(注意:D和d,P和p大小写的区别); 4是对固定报表在设计窗口直接将报表Control控件摆放到位对于活报表应首先考虑报表最大情形将足够Control控件分别放置在区别区域位置大小可以不必深究然后在报表输出前用VBA代码对所有Control控件属性进行调整包括位置、高度、宽度、字体、对齐方式、显示格式、可见性等等相应对Section也应根据情况调整其高度和可见性最后用个例子模板来介绍说明其使用思路方法连接数据库With 数据环境.rsCommand名If .State = adStateOpen Then .Close .Source = SQL语句.Open 打开想输出数据库数据项以便输出End WithWith 报表名.DataSource=数据环境.DataMember=Command名这两行也可固定设好而不必每次设置设置页表头部分(RpttLabel…为报表Control控件名).Sections(2).Controls("RptLabelPage").Caption = "共%P页第%p页".Sections(2).Controls("RptLabelDate").Caption = "打印日期:%D".Sections(3).Controls("RptLabel1").Left=……设置细节部分(RptShapeX、RptTextBoxX为报表Control控件名).Sections(3).Controls("RptShape1").Left=….Sections(3).Controls("RptShape1").Top=….Sections(3).Controls("RptShape1").Height=….Sections(3).Controls("RptShape1").Width=….Sections(3).Controls("RptTextBox1").DataMember=Command名.Sections(3).Controls("RptTextBox1").DataField=字段1.Section s(3).Controls("RptTextBox1")=…….Sections(3).Controls("RptShapeN").Visible=False.Sections(3).Controls("RptTextBoxN").Visible=False…. Sections(3).Height=计算出或固定细节高度动态调整报表标题(RptLabelTitle为报表标签Control控件名).Sections(2). Controls("Rpt LabelTitle").Left=…….Sections(2). Controls("RptLabelTitle").Alignment=……调整完毕后.Show 或 .PrReportEnd With这样做优点是报表设计时简单调整方便、随意只需更改点代码而不必为了点点修改而费神在设计窗口调整半天vb6.0 中,用"datareport" 报表控件制作报表,纸张定义 A4 A3 <上一篇 | 下一篇> '在vb6.0中,用"datareport" 报表控件制作报表,当使用报表预览功能时,"datareport"'报表控件将使用"windows系统的当前默认打印机"的打印设置,若该打印设置纸张尺寸(如A4纸)小于"datareport"'报表控件所需纸张尺寸(如A3纸),则"datareport" 报表预览时将会出现"打印纸张尺寸小于报表宽度"错误,'请教如何用代码设置"windows系统的当前默认打印机"的打印机纸张尺寸,而不需用"公共对话框"的打印设置方法?Option ExplicitPublic Enum PrinterOrientationConstantsOrientPortrait = 2OrientLandscape = 1End Enum'Printer.PaperSize = vbPRPSA3Private Type DEVMODEdmDeviceName As String * 32dmSpecVersion As IntegerdmDriverVersion As Integer dmSize As IntegerdmDriverExtra As IntegerdmFields As LongdmOrientation As IntegerdmPaperSize As IntegerdmPaperLength As IntegerdmPaperWidth As IntegerdmScale As IntegerdmCopies As IntegerdmDefaultSource As Integer dmPrintQuality As Integer dmColor As IntegerdmDuplex As IntegerdmYResolution As IntegerdmTTOption As IntegerdmCollate As IntegerdmFormName As String * 32 dmUnusedPadding As Integer dmBitsPerPel As IntegerdmPelsWidth As LongdmPelsHeight As LongdmDisplayFlags As LongdmDisplayFrequency As Long End TypePrivate Type PRINTER_DEFAULTSpDataType As StringpDevMode As LongDesiredAccess As LongEnd TypePrivate Type PRINTER_INFO_2pServerName As LongpPrinterName As LongpShareName As LongpPortName As LongpDriverName As LongpComment As LongpLocation As LongpDevMode As LongpSepFile As LongpPrintProcessor As LongpDataType As LongpParameters As LongpSecurityDescriptor As LongAttributes As LongPriority As LongDefaultPriority As LongStartTime As LongUntilTime As LongStatus As LongcJobs As LongAveragePPM As LongEnd TypePrivate Const DC_PAPERNAMES = 16Private Const DC_PAPERS = 2Private Const DC_PAPERSIZE = 3Private Const DM_IN_BUFFER = 8Private Const DM_OUT_BUFFER = 2Private Const DM_ORIENTATION = &H1Private Const DM_PAPERSIZE = &H2&Private Const DMPAPER_A3 = 8 ' A3 297 x 420 mmPrivate Const DMPAPER_A4 = 9 ' A4 210 x 297 mmPrivate Const PRINTER_ACCESS_ADMINISTER = &H4Private Const PRINTER_ACCESS_USE = &H8Private Const STANDARD_RIGHTS_REQUIRED = &HF0000Private Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or _ PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _(hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)Private Declare Function OpenPrinter Lib "winspool.drv" Alias _"OpenPrinterA" (ByVal pPrinterName As String, phPrinter As _ Long, pDefault As Any) As LongPrivate Declare Function ClosePrinter Lib "winspool.drv" _(ByVal hPrinter As Long) As LongPrivate Declare Function DocumentProperties Lib "winspool.drv" _Alias "DocumentPropertiesA" (ByVal hWnd As Long, ByVal hPrinter As Long, _ByVal pDeviceName As String, pDevModeOutput As Any, pDevModeInput As Any, _ByVal fMode As Long) As LongPrivate Declare Function GetPrinter Lib "winspool.drv" _Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _pPrinter As Any, ByVal cbBuf As Long, pcbNeeded As Long) As LongPrivate Declare Function SetPrinter Lib "winspool.drv" _Alias "SetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _pPrinter As Any, ByVal Command As Long) As LongPrivate Declare Function DeviceCapabilities Lib "winspool.drv" _Alias "DeviceCapabilitiesA" (ByVal lpDeviceName As String, ByVal lpPort As String, _ByVal iIndex As Long, ByVal lpOutput As String, lpDevMode As DEVMODE) As LongFunction SetDefaultPrinterOrientation(ByVal eOrientation As _PrinterOrientationConstants, ByVal strPaperSize As String) As BooleanDim bDevMode() As ByteDim bPrinterInfo2() As ByteDim hPrinter As LongDim lResult As LongDim nSize As LongDim sPrnName As StringDim dm As DEVMODEDim pd As PRINTER_DEFAULTSDim pi2 As PRINTER_INFO_2' Get device name of default printersPrnName = Printer.DeviceName' PRINTER_ALL_ACCESS required under' NT, because we're going to call' SetPrinterpd.DesiredAccess = PRINTER_ALL_ACCESS' Get a handle to the printer.If OpenPrinter(sPrnName, hPrinter, pd) Then' Get number of bytes requires for' PRINTER_INFO_2 structureCall GetPrinter(hPrinter, 2&, 0&, 0&, nSize)' Create a buffer of the required si zeReDim bPrinterInfo2(1 To nSize) As Byte' Fill buffer with structurelResult = GetPrinter(hPrinter, 2, bPrinterInfo2(1), _nSize, nSize)' Copy fixed portion of structure' into VB Type variableCall CopyMemory(pi2, bPrinterInfo2(1), Len(pi2))' Get number of bytes requires for' DEVMODE structurenSize = DocumentProperties(0&, hPrinter, sPrnName, _ 0&, 0&, 0)' Create a buffer of the required si zeReDim bDevMode(1 To nSize)' If PRINTER_INFO_2 points to a DEVMOD E' structure, copy it into our bufferIf pi2.pDevMode ThenCall CopyMemory(bDevMode(1), ByVal pi2.pDevMode, Len(dm))Else' Otherwise, call DocumentProperties ' to get a DEVMODE structureCall DocumentProperties(0&, hPrinter, sPrnName, _bDevMode(1), 0&, DM_OUT_BUFFER)End If' Copy fixed portion of structure' into VB Type variableCall CopyMemory(dm, bDevMode(1), Len(dm))With dm' Set new orientationSelect Case strPaperSizeCase "A3".dmPaperSize = DMPAPER_A3 Case "A4".dmPaperSize = DMPAPER_A4 End Select.dmOrientation = eOrientation.dmFields = DM_ORIENTATION + DM_PAPERSIZE End With' Copy our Type back into bufferCall CopyMemory(bDevMode(1), dm, Len(dm))' Set new orientationCall DocumentProperties(0&, hPrinter, sPrnName, _ bDevMode(1), bDevMode(1), DM_IN_BUFFER Or _ DM_OUT_BUFFER)' Point PRINTER_INFO_2 at our' modified DEVMODEpi2.pDevMode = VarPtr(bDevMode(1))' Set new orientation system-widelResult = SetPrinter(hPrinter, 2, pi2, 0&)' Clean up and exitCall ClosePrinter(hPrinter)SetDefaultPrinterOrientation = TrueElseSetDefaultPrinterOrientation = FalseEnd IfEnd Function''''----------------------------------''''---njx:窗体调用的代码:打印纸选用:1:纵向 2.横向'''SetDefaultPrinterOrientation 2, "A3"''''-----------------------------------1.报表的概念利用报表可以把数据表中的数据按一定的格式输出到屏幕上或打印到纸上。
vb 6之数据报表使用技巧
vb 6之数据报表使用技巧vb 6.0专业版和企业版中的数据报表设计器与数据环境设计器是数据访问的新内容。
msdn 所提供的prjnwind.vbp 示例工程在设计阶段(design time)就已将dataenvironment设为datareport的数据源,并将打印格式也设好,这种做法不太利于程序的通用性。
当然,我们也可以对dataenvironment编程,在运行阶段(run time)控制数据源。
其实,datareport可以完全脱离dataenvironment,而打印由动态sql生成的recordset。
实现代码如下:private sub datareport_initialize()…dim adoconnectionx as new adodb.connectiondim adorecordsetx as new adodb.recordsetadoconnectionx.open″provider=microsoft.jet.oledb.3.51;persist securityinfo=false;data source=″&app.path &″\xxx.mdb″adorecordsetx.open ″select *from表名″, adoconnectionxset datareportx.datasource = adorecordsetx′设置datareport 的数据源…由vb 6 所提供的datareport.sections.item(index).controls.item(index)...这样的语法不太利于编程控制数据报表设计器的专用控件的位置、大小等各种属性。
但是,我们可以编程根据控件所在区域(section)和所属类别等将它们分成若干集合(collection),然后通过控制集合的元素来控制其所代表的控件。
当然,在设计阶段我们要将足够多的控件绘制到datareport上备用。
用VB操作Excel(VB6.0)(整理)
用VB操作Excel(VB6.0)(整理)用VB操作Excel(VB6.0)(整理)全面控制Excel:首先创建Excel对象,使用ComObj:Dim ExcelID as Excel.ApplicationSet ExcelID as new Excel.Application1)显示当前窗口:ExcelID.Visible:=True;2)更改Excel标题栏:ExcelID.Caption:='应用程序调用MicrosoftExcel';3)添加新工作簿:ExcelID.WorkBooks.Add;4)打开已存在的工作簿:ExcelID.WorkBooks.Open('C:\Excel\Demo.xls');5)设置第2个工作表为活动工作表:ExcelID.WorkSheets[2].Activate;或ExcelID.WorkSheets['Sheet2'].Activate;6)给单元格赋值:ExcelID.Cells[1,4].Value:='第一行第四列';7)设置指定列的宽度(单位:字符个数),以第一列为例:ExcelID.ActiveSheet.Columns[1].ColumnsWidth:=5;8)设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:ExcelID.ActiveSheet.Rows[2].RowHeight:=1/0.035;//1厘米9)在第8行之前插入分页符:ExcelID.WorkSheets[1].Rows[8].PageBreak:=1;10)在第8列之前删除分页符:ExcelID.ActiveSheet.Columns[4].PageBreak:=0;11)指定边框线宽度:ExcelID.ActiveSheet.Range['B3:D4'].Borders[2].Weight:=3;1-左 2-右 3-顶4-底 5-斜(\) 6-斜(/)12)清除第一行第四列单元格公式:ExcelID.ActiveSheet.Cells[1,4].ClearContents;13)设置第一行字体属性:ExcelID.ActiveSheet.Rows[1]:='隶书'; ExcelID.ActiveSheet.Rows[1].Font.Color :=clBlue; ExcelID.ActiveSheet.Rows[1].Font.Bold :=True;ExcelID.ActiveSheet.Rows[1].Font.UnderLine:=True;14)进行页面设置:a.页眉:ExcelID.ActiveSheet.PageSetup.CenterHeader:='报表演示'; b.页脚:ExcelID.ActiveSheet.PageSetup.CenterFooter:='第&P页'; c.页眉到顶端边距2cm:ExcelID.ActiveSheet.PageSetup.HeaderMargin:=2/0.035; d.页脚到底端边距3cm:ExcelID.ActiveSheet.PageSetup.HeaderMargin:=3/0.035; e.顶边距2cm:ExcelID.ActiveSheet.PageSetup.T opMargin:=2/0.035;f.底边距2cm:ExcelID.ActiveSheet.PageSetup.BottomMargin:=2/0.035; g.左边距2cm:ExcelID.ActiveSheet.PageSetup.LeftMargin:=2/0.035;h.右边距2cm:ExcelID.ActiveSheet.PageSetup.RightMargin:=2/0.035;i.页面水平居中:ExcelID.ActiveSheet.PageSetup.CenterHorizontally:=2/0.035; j.页面垂直居中:ExcelID.ActiveSheet.PageSetup.CenterVertically:=2/0.035; k.打印单元格网线:ExcelID.ActiveSheet.PageSetup.PrintGridLines:=True;15)拷贝操作:a.拷贝整个工作表:ed.Range.Copy;b.拷贝指定区域:ExcelID.ActiveSheet.Range['A1:E2'].Copy;c.从A1位置开始粘贴:ExcelID.ActiveSheet.Range.['A1'].PasteSpecial;d.从文件尾部开始粘贴:ExcelID.ActiveSheet.Range.PasteSpecial;16)插入一行或一列:a.ExcelID.ActiveSheet.Rows[2].Insert;b.ExcelID.ActiveSheet.Columns[1].Insert;17)删除一行或一列:a.ExcelID.ActiveSheet.Rows[2].Delete;b.ExcelID.ActiveSheet.Columns[1].Delete;18)打印预览工作表:ExcelID.ActiveSheet.PrintPreview;19)打印输出工作表:ExcelID.ActiveSheet.PrintOut;20)工作表保存:IfnotExcelID.ActiveWorkBook.SavedthenExcelID.ActiveSheet.PrintPreviewEndif21)工作表另存为:ExcelID.SaveAs('C:\Excel\Demo1.xls');22)放弃存盘:ExcelID.ActiveWorkBook.Saved:=True;23)关闭工作簿:ExcelID.WorkBooks.Close;24)退出Excel:ExcelID.Quit;25)设置工作表密码:ExcelID.ActiveSheet.Protect"123",DrawingObjects:=True,Con tents:=True,Scenarios:=True26)EXCEL的显示方式为最大化ExcelID.Application.WindowState=xlMaximized27)工作薄显示方式为最大化ExcelID.ActiveWindow.WindowState=xlMaximized28)设置打开默认工作薄数量ExcelID.SheetsInNewWorkbook=329)'关闭时是否提示保存(true保存;false不保存)ExcelID.DisplayAlerts=False30)设置拆分窗口,及固定行位置ExcelID.ActiveWindow.SplitRow=1ExcelID.ActiveWindow.FreezePanes=True31)设置打印时固定打印内容ExcelID.ActiveSheet.PageSetup.PrintTitleRows="$1:$1"32)设置打印标题ExcelID.ActiveSheet.PageSetup.PrintTitleColumns=""33)设置显示方式(分页方式显示)ExcelID.ActiveWindow.View=xlPageBreakPreview34)设置显示比例ExcelID.ActiveWindow.Zoom=10035)让Excel响应DDE请求Ex.Application.IgnoreRemoteRequests=False用VB操作EXCEL示例代码Private Sub Command3_Click()On Error GoTo err1Dim i As LongDim j As LongDim objExl As Excel.Application '声明对象变量Me.MousePointer=11 '改变鼠标样式Set objExl=New Excel.Application'初始化对象变量objExl.SheetsInNewWorkbook=1 '将新建的工作薄数量设为1 objExl.Workbooks.Add'增加一个工作薄objExl.Sheets(objExl.Sheets.Count).Name="book1" '修改工作薄名称objExl.Sheets.Add,objExl.Sheets("book1")‘增加第二个工作薄在第一个之后objExl.Sheets(objExl.Sheets.Count).Name="book2"objExl.Sheets.Add,objExl.Sheets("book2")‘增加第三个工作薄在第二个之后objExl.Sheets(objExl.Sheets.Count).Name="book3"objExl.Sheets("book1").Select '选中工作薄<book1>For i=1 To 50'循环写入数据For j=1 To 5If i=1 ThenobjExl.Selection.NumberFormatLocal="@" '设置格式为文本objExl.Cells(i,j)="E"&i&jElseobjExl.Cells(i,j)=i&jEndIfNextNextobjExl.Rows("1:1").Select '选中第一行objExl.Selection.Font.Bold=True '设为粗体objExl.Selection.Font.Size=24 '设置字体大小objExl.Cells.EntireColumn.AutoFit '自动调整列宽objExl.ActiveWindow.SplitRow=1 '拆分第一行objExl.ActiveWindow.SplitColumn=0 '拆分列objExl.ActiveWindow.FreezePanes=True '固定拆分objExl.ActiveSheet.PageSetup.PrintTitleRows="$1:$1" '设置打印固定行objExl.ActiveSheet.PageSetup.PrintTitleColumns=""'打印标题objExl.ActiveSheet.PageSetup.RightFooter="打印时间:"&_ Format(Now,"yyyy年mm月dd日hh:MM:ss")objExl.ActiveWindow.View=xlPageBreakPreview'设置显示方式objExl.ActiveWindow.Zoom=100 '设置显示大小'给工作表加密码objExl.ActiveSheet.Protect"123",DrawingObjects:=True, _Contents:=True,Scenarios:=TrueobjExl.Application.IgnoreRemoteRequests=FalseobjExl.Visible=True '使EXCEL可见objExl.Application.WindowState=xlMaximized'EXCEL的显示方式为最大化objExl.ActiveWindow.WindowState=xlMaximized'工作薄显示方式为最大化objExl.SheetsInNewWorkbook=3 '将默认新工作薄数量改回3个Set objExl=Nothing'清除对象Me.MousePointer=0 '修改鼠标ExitSuberr1:objExl.SheetsInNewWorkbook=3objExl.DisplayAlerts=False '关闭时不提示保存objExl.Quit'关闭EXCELobjExl.DisplayAlerts=True '关闭时提示保存Set objExl=NothingMe.MousePointer=0End Sub。
VB基础教程:第九章第六节报表制作
9.6 报表制作1. 报表的概念 利⽤报表可以把数据表中的数据按⼀定的格式输出到屏幕上或打印到纸上。
2.制作报表的⽅法 在VB6.0中可以利⽤报表设计器来制作报表,从“⼯程”中选择“添加data report”,将报表设计器加⼊到当前⼯程中,报表由5部分组成: 报表标头——每份报表只有⼀个,可以⽤标签建⽴报表名。
页标头——每页有⼀个,即每页的表头,如字段名。
细节——需要输出的具体数据,⼀⾏⼀条记录。
页脚注——每页有⼀个,如页码。
报表脚注——每份报表只有⼀个,可以⽤标签建⽴对本报表的注释、说明。
使⽤报表设计器处理的数据需要利⽤数据环境设计器创建与数据库的连接,从“⼯程”菜单中选择 “添加Data Enviroment”,在连接中选择指定的数据库⽂件,完成与数据库的连接,然后产⽣Command对象连接数据库内的表。
制作报表的步骤: (1)新建⼯程,在窗体上放置两个命令按钮; (2)从“⼯程”菜单中“添加Data Enviroment”,右击Connection1,在属性中选择“Microsoft Jet 4 OLE DB Provider”,在“连接”中指定数据库; (3)再次右击Connection1,选则“添加命令”,创建Command1对象,右击Command1,在属性中设置该对象连接的数据源为需要打印的数据表; (4)在从“⼯程”菜单中“添加Data Report”,在属性窗⼝中设置DataSource为数据环境DataEnviroment1对象,DataMember为Command1对象,即指定数据报表设计器DataReport1的数据来源; (5)将数据环境设计器中Command1对象内的字段拖到数据报表设计器的细节区; (6)利⽤标签控件在报表标头区插⼊报表名,在页标头区设置报表每⼀页顶部的标题; (7)利⽤线条控件在报表内加⼊直线,利⽤图形控件和形状控件加⼊图案或图形; (8)利⽤DataReport1对象的Show⽅法显⽰报表,在窗体Click事件加代码:DataReport1.Show; (9)利⽤预览窗⼝按打印按钮可以打印报表; (10)利⽤预览窗⼝⼯具栏上的导出按钮可以将报表内容输出成⽂本⽂件或Html⽂件;也可以利⽤DataReport1对象的ExportReport⽅法将报表内容输出成⽂本⽂件或Html⽂件。
VB6.0控制EXCEL进行报表设计及打印!
VB6.0控制EXCEL进行报表设计及打印!在工控程序的开发中,经常涉及到数据信息的分析、加工,最终还需把统计结果形成各种形式的报表打印输出。
在Visual Basic中制作报表,通常是用数据环境设计器(DataEnvironment Designer)与数据报表设计器(Data Report Designer),或者使用第三方产品来完成。
但对于大多数习惯于Excel报表的用户而言,用以上方法生成的报表在格式和功能等方面往往不能满足他们的要求。
由于Excel具有自己的对象库,在Visual Basic工程中可以加以引用,通过对Excel使用OLE自动化,可以创建一些外观整洁的报表,然后打印输出。
这样实现了Visual Basic应用程序对Excel的控制。
本文将针对一个具体实例,阐述基于VB和EXCEL的报表设计及打印过程。
1)创建Excel对象Excel对象模型包括了128个不同的对象,从矩形、文本框等简单的对象到透视表,图表等复杂的对象。
下面简单介绍一下其中最重要,也是用得最多的五个对象。
(1)Application对象:Application对象处于Excel对象层次结构的顶层,表示 Excel自身的运行环境。
(2)Workbook对象:Workbook对象直接地处于Application 对象的下层,表示一个Excel工作薄文件。
(3)Worksheet对象:Worksheet对象包含于Workbook对象,表示一个Excel工作表。
(4)Range对象:Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。
(5)Cells对象:Cells对象包含于Worksheet对象,表示Excel 工作表中的一个单元格。
如果要启动一个Excel,使用Workbook和Worksheet对象,下面的代码启动了Excel并创建了一个新的包含一个工作表的工作薄:Dim zsbexcel As Excel.ApplicationSet zsbexcel = New Excel.Applicationzsbexcel.Visible = True如要Excel不可见,可使zsbexcel.Visible = Falsezsbexcel.SheetsInNewWorkbook = 1Set zsbworkbook = zsbexcel.Workbooks.Add2)设置单元格和区域值要设置一张工作表中每个单元格的值,可以使用Worksheet对象的Range属性或Cells属性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Cmd.ActiveConnection = gConn
mandType = adCmdText
mandText = SSql
Cmd.Execute
'刷新数据报表,使其显示最新查询记录
Set RptCost.DataSource = EnvCatv
mandText = SSql
Cmd.Execute
'将统计明细添加到虚拟表中
ssql="Insert into EquipmentCost"&&" (Project,Name,Standard,Type,Num,Cost)"&&" select a.project as 'Project', as 'Name',"&&"b.standard as 'Standard', b.type as 'Type',"&&"b.num as 'Num',b.num*b.price as 'Cost'"&&"from Outbill a left join OutbillDetail b on(a.outbill=b.outbill)"&&" where a.OutDate>=" && Date1 && " and a.OutDate<=" && Date2
三、在程序中填充统计中间表,更新数据报表并显示
设计一个打印模块如下:
Public Sub Print_EquipMentCost(Byval Date1 as Date, Byval Date2 as Date)
'清空虚拟表
Dim SSQL as string
Dim Cmd As New mand
SSql = "Delete From EquipmentCost"
Cmd.ActiveConnection = gConn
'数据库连接变量,读者可以建立自己的数据库连接变量
mandType = adCmdText
50
出库单明细表名为OutBillDetail,结构如下: 字段名
字段含义
类型
长度
OutBill
出库单号
Varchar
10
EmName
器材名称
Varchar
12
EmStandard
器材规格
Varchar
12
EmType
器材型号
Varchar
12
一、报表要求与分析
该报表要求列出在指定的时间段内实施的各项工程所耗器材明细、数量、费用,并且计算各项工程的成本,最终计算所有工程的累计成本。
需求分析后可知该报表是个典型的动态数据源下分组统计报表,分组项为工程名称,要求对每个分组进行子汇总和对所有分组进行总汇总。由于在该系统中的出库单和出库单明细分别存放在不同的表中,因此必须根据报表的要求预先构造一个成本统计中间表,命名为EquipMentCost。相关表结构如图1。
最后对该命令进行总汇总,右键单击该命令,选择“属性”页的“汇总”选项页,将“合计1”、“合计2”设置为总汇总字段,分别命名为“总计1”、“总计2”,单击“应用”按钮观看效果。
按照上面的步骤,我们在当前连接CatvConn下建立了一个包含汇总的分组命令,接着建立一个数据报表设计器命名为RptCost,将该分组子命令拖到数据报表的“细节”段内,释放后,调节各个字段的大小和位置,其中,子汇总字段和总汇总字段还应该分别另建分组节,总汇总字段所处的节应位于最上层。
接着对该命令进行子汇总,右键单击该命令,选择“属性”页的“汇总”选项页,将Num(器材数量)、Cost(器材成本)设置为子汇总字段,分别命名为“合计1”、“合计2”,汇总名称为GrantTotal,该名称为总汇总所共用。在程序中显示报表前,必须对该名称对应的记录集RsGrantTotal进行刷新,否则数据报表不能反映统计中间表的最新内容。单击“应用”按钮观看效果。
Amount
数量
Int
Price
单价
smallmoney
成本统计中间表名为EquipMentCost,结构如下: 字段名
字段含义
类型
长度
Project
工程名称
Varchar
50
Name
器材名称
Varchar
12
Standard
器材规格
VHale Waihona Puke rchar 在利用VB开发MIS系统的过程中,经常需要制作动态统计报表。本文就如何实现动态数据源下的分组交叉统计报表进行阐述,并结合实例给出编程指导。
在VB6.0的数据环境设计器中,我们可以利用“添加命令”一项来连接报表所需的数据源,同时利用“添加命令”属性中的分组与合计功能设计分组交叉统计报表的数据源,至此我们可以设计简单的数据存在于单一表静态数据源下分组交叉报表,对于数据存在多表的复杂的动态数据源下的分组交叉报表来说,仍实现不了,实现该功能的关键在于构造一个符合动态数据源要求的中间表。下面以一管理系统中工程成本统计报表的实例来说明如何实现动态数据源下的分组交叉统计报表。
select a.project as 'Project', as 'Name',b.standard as 'Standard', b.type as 'Type',b.num as 'Num', b.numb.price as 'Cost' from Outbill a left join OutbillDetail b on (a.outbill=b.outbill)
字段含义
类型
长度
OutBill
出库单号
Varchar
10
OutDate
出库日期
SmallDate
LLMan
领料人
Varchar
12
DepartMent
部门
Varchar
12
Operator
经手人
VarChar
12
Project
对应工程
VarChar
where a.OutDate>=date1 and a.OutDate<=date2
date1 和 date2 变量用来指定时间,注意插入前要先清空该中间表的所有数据。
二、利用数据环境设计器生成工程成本报表的初始模板
打开一个数据环境设计器,在其属性表单中设置其名称属性为EnvCatv,并添加一个数据库连接到当前库Catv,连接名称为CatvConn。在当前库连接下单击右键,选择“添加命令”选项,创建一个命令,命名为CmdCost,在该命令的属性页的“通用”选项页上设置SQL语句如下:
12
Type
器材型号
Varchar
12
Num
器材用量
Int
Cost
器材成本
smallmoney
'数据环境名称
EnvCatv.rsGrandTotal.Requery 'rsGrantTotal 为分组子命令记录集名称
'显示数据报表
RptCost.Show
End Sub
本程序在VB6.0、MS-SQL Server下运行成功。
出库单表名为OutBill,结构如下: 字段名
通过对表OutBill和OutBillDetail的分析,发现两者通过关键字OutBill 相联,下面通过SQL语句生成中间表EquipmentCost,语句如下:
Insert into EquipmentCost
(Project,Name,Standard,Type,Num,Cost)
Select from EquipmentCost
单击“应用”按钮察看效果。
随后对该命令进行分组,右键单击该命令,选择“属性”选项,在属性页的“分组”选项页中,将Project(工程名称)字段设置为分组字段,分组名称为GroupCost,单击“应用”按钮观看效果。