vb导出excel报表
- 格式:wps
- 大小:37.00 KB
- 文档页数:6
'从数据集里导出数据Dim sql As Stringsql = "SELECT FIRST 20 * FROM student"claimset = sqlfun.Dataset(sql)Dim xlApp As New Excel.Application()Dim xlBook As Excel.WorkbookDim xlSheet As Excel.WorksheetDim rowIndex, colIndex As IntegerrowIndex = 1colIndex = 0xlBook = xlApp.Workbooks().AddxlSheet = CType(xlBook.Worksheets("sheet1"), Excel.Worksheet)Dim Table As New DataSet()Table = claimset'将所得到的表的列名,赋值给单元格Dim Col As DataColumnDim Row As DataRowFor Each Col In claimset.Tables(0).ColumnscolIndex = colIndex + 1xlApp.Cells(1, colIndex) = Col.ColumnNameNext'得到的表所有行,赋值给单元格For Each Row In claimset.Tables(0).RowsrowIndex = rowIndex + 1colIndex = 0For Each Col In claimset.Tables(0).ColumnscolIndex = colIndex + 1xlApp.Cells(rowIndex, colIndex) = Row(Col.ColumnName)NextNext'从gridview导出数据Response.ClearContent()Response.Buffer = TrueResponse.Charset = "GB2312"Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls") Response.ContentType = "application/excel"Dim sw As New StringWriter()Dim htw As New HtmlTextWriter(sw)GridView1.RenderControl(htw)Response.Write(sw.ToString())Response.End()Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control) '处理'GridView' 必需置于有 runat=server 的表单标记之中End Sub。
基于VB和EXCEL的通用数据库报表设计常熟高等专科学校钱忆平215500摘要本文讨论了一种基于VB和EXCEL的通用数据库报表设计方案,并结合开发实例,给出了VB调用ACESS数据库实现通用数据库报表设计的程序实现方法。
关键词数据库报表VB EXCEL1.引言在各种数据库管理系统中,经常涉及到数据信息的分析、统计,最后将结果信息制作成报表汇总输出。
在用Visual Basic设计的数据库管理系统中,报表的设计方法通常有两种。
一是用VB自身的数据环境设计器(Data Environment Designer)和数据库报表设计器(Report Designer)实现;二是采用第三方的ActiveX报表控件,在此基础上直接进行设计。
但是,两种报表设计方法都存在缺点。
前者报表设计方法较为烦琐,在设计一些具有多项汇总的数据报表时,功能不足,报表的格式控制较为困难。
后者的报表设计方法较为简便,有多种报表格式可以套用,但用户制作报表的要求和格式各不相同,难以在报表的格式和功能上真正满足用户的要求。
所以,有必要寻找一种灵活方便的、能满足用户需求的、便于程序控制的报表设计方法,解决报表设计中存在的问题。
利用VB和EXCEL进行通用数据库报表设计是一种有效的解决方案。
2.通用数据库报表设计的一般方法VB和EXCEL都是微软公司的典型产品,VB有较强的数据管理、控制和应用程序开发能力;EXCEL是一个电子表格软件,具有强大的数据处理和格式输出功能,能根据用户的要求灵活、方便地制作出各种格式的数据报表。
EXCEL有自身的对象库,能够在VB中直接调用。
通过在VB中建立EXCEL的APPLICATION对象及相关子对象,用VB对数据库数据进行管理和调用,实现数据库数据从VB到EXCEL的直接输出,然后由EXCEL对数据格式化,实现通用数据库报表输出功能。
通用数据库报表设计的流程框图如图1。
3.实现步骤(1)用ADO数据接口与数据库建立连接众所周知,要实现对数据库数据的管理和调用,可以用多种不同的编程语言和不同的数据库管理系统完成,各种编程语言对数据库系统的数据调用方法也有多种,有DAO、RDO、ADO等。
VB6.0导出excel⽅法源代码VB6.0 导出excel ⽅法源代码⽅法⼀:⽤Msflexgrid的Textmatrix属性取Msflexgrid中每⼀个单元格的内容,然后填到Excel表中,或者写成CSV格式⽅法⼆:直接把查询结果导出成Excel⼯作表Public Sub Export(formname As Form, flexgridname As String)Dim xlApp As Object 'Excel.ApplicationDim xlBook As Object 'Excel.WorkbookDim xlSheet As Object 'Excel.WorksheetScreen.MousePointer = vbHourglassOn Error GoTo Err_ProcSet xlApp = CreateObject("Excel.Application")Set xlBook = xlApp.Workbooks.AddSet xlSheet = xlBook.Worksheets(1)'Begin to fill data to sheetDim i As LongDim j As IntegerDim k As IntegerWith formname.Controls(flexgridname)For i = 0 To .rows - 1k = 0For j = 0 To .Cols - 1If .colwidth(j) > 20 Or .colwidth(j) < 0 Thenk = k + 1xlSheet.Cells(i + 1, k).Value = "'" & .TextMatrix(i, j)End IfNext jNext iEnd WithxlApp.Visible = TrueScreen.MousePointer = vbDefaultExit SubErr_Proc:Screen.MousePointer = vbDefaultMsgBox "请确认您的电脑已安装Excel!", vbExclamation,"提⽰"End Sub===================================Public Function ExporToExcel(strOpen As String)'*********************************************************'* 名称:ExporToExcel'* 功能:导出数据到EXCEL'* ⽤法:ExporToExcel(sql查询字符串)'*********************************************************Dim Rs_Data As New ADODB.RecordsetDim Irowcount As IntegerDim Icolcount As IntegerDim cn As New ADODB.ConnectionDim xlApp As New Excel.ApplicationDim xlBook As Excel.WorkbookDim xlSheet As Excel.WorksheetDim xlQuery As Excel.QueryTableWith Rs_DataIf .State = adStateOpen Then.CloseEnd If.ActiveConnection = "provider=msdasql;DRIVER=Microsoft Visual FoxPro Driver;UID=;Deleted=yes;Null=no;Collate=Machine;BackgroundFetch=no;Exclusive=No;SourceType=DBF; SourceDB=D:\DBF;".CursorLocation = adUseClient.CursorType = adOpenStatic.Source = strOpen.OpenEnd WithWith Rs_DataIf .RecordCount < 1 ThenMsgBox ("没有记录!")Exit FunctionEnd If'记录总数Irowcount = .RecordCount'字段总数Icolcount = .Fields.CountEnd WithSet xlApp = CreateObject("Excel.Application")Set xlBook = NothingSet xlSheet = NothingSet xlBook = xlApp.Workbooks().AddSet xlSheet = xlBook.Worksheets("sheet1")xlApp.Visible = True'添加查询语句,导⼊EXCEL数据Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Range("a1")) xlQuery.FieldNames = True '显⽰字段名xlQuery.RefreshxlApp.Application.Visible = TrueSet xlApp = Nothing '"交还控制给ExcelSet xlBook = NothingSet xlSheet = NothingEnd Function=============================='*********************************************************'* 名称:OutDataToExcel'* 功能:将MsFlexGrid控件中显⽰的内容输出到Excel表格中进⾏打印'*********************************************************Public Sub OutDataToExcel(Flex As MSFlexGrid) '导出⾄ExcelDim s As StringDim i As IntegerDim j As IntegerDim k As IntegerOn Error GoTo ErtMe.MousePointer = 11Dim Excelapp As Excel.ApplicationSet Excelapp = New Excel.ApplicationOn Error Resume NextDoEventsExcelapp.SheetsInNewWorkbook = 1Excelapp.Workbooks.AddExcelapp.ActiveSheet.Cells(1, 3) = sExcelapp.Range("C1").SelectExcelapp.Selection.Font.FontStyle = "Bold"Excelapp.Selection.Font.Size = 16With Flexk = .RowsFor i = 0 To k - 1For j = 0 To .Cols - 1DoEventsExcelapp.ActiveSheet.Cells(3 + i, j + 1) = "'" & .TextMatrix(i, j)Next jNext iEnd WithMe.MousePointer = 0Excelapp.Visible = TrueExcelapp.Sheets.PrintPreviewErt:If Not (Excelapp Is Nothing) ThenExcelapp.QuitEnd IfEnd Sub⼀个按钮,点击出现对话框(对话框控件已经有),在硬盘⾥⾯查找excel⽂件(当然,后缀名是xls了),找到⽬标excel⽂件后,该excel⽂件⾥⾯是⼀些数据,点击确定,就可以把excel⾥⾯的内容保存到MSFlexGrid控件⾥⾯了还有⼀个,按钮,点击后出现对话框,可以保存MSFlexGrid⾥⾯的东西到⼀个excel⾥⾯谢谢⼤家了⽤CommonDialog可以解决选定打开.xls⽂件问题然后就是读取进去哈哈保存代码如下'添加command控件⼀个MSFlexGrid控件⼀个Private Sub Command1_Click()On Error Resume NextDim fileadd As StringCommonDialog1.ShowOpenCommonDialog1.Filter = "xls⽂件(*.xls)|*.xls" '选择你要的⽂件fileadd = CommonDialog1.FileNameMSHFlexGrid1.Redraw = False '关闭表格重画,加快运⾏速度Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象Set xlBook = xlApp.Workbooks.Open(fileadd) '打开已经存在的EXCEL⼯件簿⽂件xlApp.Visible = True '设置EXCEL对象可见(或不可见)Set xlsheet = xlBook.Worksheets("Sheet1") '设置活动⼯作表For R = 0 To MSHFlexGrid1.Rows - 1 '⾏循环For C = 0 To MSHFlexGrid1.Cols - 1 '列循环MSHFlexGrid1.Row = RMSHFlexGrid1.Col = CxlBook.Worksheets("Sheet1").Cells(R + 1, C + 1) = MSHFlexGrid1.Text '保存到EXCEL Next C Next RMSHFlexGrid1.Redraw = TruexlApp.DisplayAlerts = False '不进⾏安全提⽰'Set xlsheet = Nothing'Set xlBook = Nothing'xlApp.Quit'Set xlApp = NothingEnd Sub。
VB导出Excel报表VB 是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的不便。
因此有很多程序员现在已经充分利用EXECL的强大报表功来实现报表功能。
但由于VB与EXCEL由于分别属于不同的应用系统,如何把它们有机地结合在一起,是一个值得我们研究的课题。
一、 VB读写EXCEL表:能获取到表的行数的代码:edRange.Rows.CountVB本身提自动化功能可以读写EXCEL表,其方法如下:1、在工程中引用Microsoft Excel类型库:从"工程"菜单中选择"引用"栏;选择Microsoft Excel 9.0 Object Library(EXCEL2000),然后选择"确定"。
表示在工程中要引用EXCEL类型库。
2、在通用对象的声明过程中定义EXCEL对象:Dim xlApp As Excel.ApplicationDim xlBook As Excel.WorkBookDim xlSheet As Excel.Worksheet3、在程序中操作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进行操作。
通过VBA实现Excel数据导入导出的方法Excel是一款功能强大的电子表格软件,在处理和分析大量数据时非常实用。
VBA(Visual Basic for Applications)是一种编程语言,可以用来自动化Excel任务,例如数据导入和导出。
本文将介绍使用VBA实现Excel数据导入和导出的方法。
首先,我们将讨论如何使用VBA来导入数据到Excel。
数据可以来自各种来源,如文本文件、数据库或其他Excel工作簿。
下面是一个示例,演示如何从文本文件导入数据:```vbaSub ImportData()Dim filePath As StringDim ws As WorksheetDim rng As Range' 获取要导入的文件路径filePath = Application.GetOpenFilename("Text Files (*.txt), *.txt")' 检查用户是否选择了文件If filePath <> "False" Then' 选择要导入数据的工作表Set ws = ThisWorkbook.Sheets("数据")' 选择要导入数据的起始单元格Set rng = ws.Range("A1")' 清空起始单元格及其之后的数据ws.Range(rng, ws.Cells(ws.Rows.Count,rng.Column)).ClearContents' 使用文本导入向导导入数据With ws.QueryTables.Add(Connection:="TEXT;" & filePath, Destination:=rng).TextFileParseType = xlDelimited.TextFileCommaDelimiter = True.RefreshEnd With' 删除导入数据时自动创建的查询表ws.QueryTables(1).DeleteMsgBox "数据导入完成。
vbsqldatagrid数据导出到excel你新建一数据工程,在其窗体中添加ADODC数据控件和DATAGRID控件。
添加COMMAND控件,将按钮控件的属性TABINDEX设置为0使用以下代码,可将在DATAGRID控件显示的数据导出到EXCEL,将下列代码中的数据库连接语句和表名改为你自己的数据库和表名:Option ExplicitDim i, j, k As IntegerDim strConn As StringDim pubConn As New adodb.ConnectionDim rsTable As New adodb.RecordsetDim strSQL As StringDim xlapp As VariantDim xlBook As VariantDim xlSHEET As VariantPrivate Sub Command1_Click()Set xlapp = CreateObject("excel.application")Set xlBook = xlapp.workbooks.AddSet xlSHEET = xlBook.worksheets(1)xlapp.Visible = TrueOn Error Resume NextIf Err.Number <> 0 Then Set xlapp = CreateObject("Excel.Application")Set xlBook = xlapp.workbooks.AddSet xlSHEET = xlBook.ActiveSheetFor k = 1 To DataGrid1.Columns.CountxlSHEET.Cells(1, k) = DataGrid1.Columns(k - 1).CaptionNext kFor i = 1 To Adodc1.Recordset.RecordCount + 1For j = 0 To DataGrid1.Columns.CountxlSHEET.Cells(i + 1, j + 1) = Adodc1.Recordset(j) 'Next jAdodc1.Recordset.MoveNextNext iEnd SubPrivate Sub Form_Load()strSQL = "select * from mdlk_sj where 批号='D012'"Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\hxrkgl.mdb;Persist Security Info=False"Adodc1.RecordSource = strSQLAdodc1.RefreshEnd Sub。
Private Sub cmdSwatch_Click()Dim xls As excel.ApplicationDim xlbook As excel.Workbook'On Error GoTo exlErrorDim i As IntegerIf Dir(Text1.Text) <> "" Then '此目录下如有同名文件给出提示,并作相应处理If MsgBox("文件已存在,是否覆盖!", vbYesNo + vbQuestion, "另存为工程造价文件") = vbNo Then Exit SubElseKill (Text1.Text) '删除文件End IfEnd If'************打开工作表***************Set xls = New excel.Applicationxls.Visible = TrueSet xlbook = xls.Workbooks.Add'*********************************For i = 0 To 14If Check2(i).Value = vbChecked ThenSelect Case iCase 8ToExcelJDanJiaSum.ToExcelJDanJiaSum xlbook, xlsCase 9ToExcelADanJiaSum.ToExcelADanJiaSum xlbook, xlsCase 10ToExcelCailiao.ToExcelCailiao xlbook, xlsCase 11ToExcelTsf.ToExcelTsf xlbook, xlsCase 12ToExcelZgcl.ToExcelZgcl xlbook, xlsEnd SelectEnd IfNextFor i = 0 To 6If Check3(i).Value = vbChecked ThenSelect Case iCase 0ToExcelMan.ToExcelMan xlbook, xlsCase 1ToExcelFSD_CL.ToExcelFSD_CL xlbook, xls Case 2ToExcelHNT.ToExcelHNT xlbook, xlsCase 3ToExcelZsf.ToExcelZsf xlbook, xlsCase 4ToExcelJingChang.ToExcelJingChang xlbook, xls Case 5ToExcelJDanJia.ToExcelJDanJia xlbook, xls Case 6ToExcelADanJia.ToExcelADanJia xlbook, xls End SelectEnd IfNextxlbook.SaveAs Text1.Text '保存EXCEL文件'***************************关闭EXCEL对象*******************If Check1.Value = vbChecked Thenxlbook.Closexls.QuitEnd IfSet xlbook = NothingSet xls = NothingExit Sub'exlError:' MsgBox Err.Description, vbOKOnly + vbCritical, "警告"End SubOption ExplicitPublic Sub ToExcelZgcl(ByRef xlbook, ByRef xls) '输出总工程量Dim con As New ADODB.ConnectionDim rst_gcl As New ADODB.RecordsetDim rst_qm As New ADODB.Recordset'**************************连接数据库****************************************con.CursorLocation = adUseClientcon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strConnection & ";Persist Security Info=False"con.Openrst_gcl.Open "zonggcl", con, adOpenKeyset, adLockOptimistic, adCmdTable '打开工程量汇总表If Not (rst_gcl.BOF And rst_gcl.EOF) Thenrst_gcl.MoveFirstEnd Ifrst_qm.Open "qianming", con, adOpenKeyset, adLockOptimistic, adCmdTable '打开签名表rst_qm.MoveFirst'****************************工作表初使化*********************************** Dim xlsheet As excel.WorksheetSet xlsheet = xlbook.Sheets.Add '添加一张工作表 = "工程量汇总"xls.ActiveSheet.PageSetup.Orientation = xlLandscape '纸张设置为横向xlsheet.Columns("a:j").Font.Size = 10xlsheet.Columns("a:j").VerticalAlignment = xlVAlignCenter '垂直居中xlsheet.Columns(1).HorizontalAlignment = xlHAlignCenter '1列水平居中对齐xlsheet.Columns(1).ColumnWidth = 8xlsheet.Columns(2).HorizontalAlignment = xlHAlignLeftxlsheet.Columns(2).ColumnWidth = 26xlsheet.Columns("c:j").HorizontalAlignment = xlHAlignRightxlsheet.Columns("c:j").ColumnWidth = 10xlsheet.Columns("c:j").NumberFormatLocal = "0.00_ " '3到10列保留两位小数'***************************写入标头************************************* xlsheet.Rows(1).RowHeight = 40xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, 10)).MergeCells = Truexlsheet.Cells(1, 1).Value = "工程量汇总"xlsheet.Cells(1, 1).Font.Size = 14xlsheet.Cells(1, 1).Font.Bold = Truexlsheet.Rows(2).RowHeight = 18xlsheet.Rows(2).HorizontalAlignment = xlHAlignCenterxlsheet.Cells(2, 1).Value = "序号"xlsheet.Cells(2, 2).Value = "工程项目及名称"xlsheet.Cells(2, 3).Value = "土方开挖(m3)"xlsheet.Cells(2, 4).Value = "石方开挖(m3)"xlsheet.Cells(2, 5).Value = "土方回填(m3)"xlsheet.Cells(2, 6).Value = "洞挖石方(m3)"xlsheet.Cells(2, 7).Value = "砼浇筑(m3)"xlsheet.Cells(2, 8).Value = "钢筋制安(t)"xlsheet.Cells(2, 9).Value = "砌石工程(m3)"xlsheet.Cells(2, 10).Value = "灌浆工程(m)"xls.ActiveSheet.PageSetup.PrintTitleRows = "$1:$2" '固定表头'***************************写入内容*************************Dim i As Integeri = 3 'i控制行Dim j As Integer 'j控制列Dim countpage As Integercountpage = 0 '控制页Do While Not rst_gcl.EOFxlsheet.Rows(i).RowHeight = 18 '控制行高For j = 1 To 10xlsheet.Cells(i, j) = rst_gcl.Fields(j) '将工程理库中的一条记录的第一个字段写入工作表中Next'每18行为一页,如果数据超出一页时进行特殊处理If i > 18 Thenxls.ActiveWindow.SmallScroll Down:=1 '活动窗口内容向下滚动1行End IfIf i Mod 18 = 0 ThenIf countpage = 0 Thenxlsheet.Range(xlsheet.Cells(2, 1), xlsheet.Cells(i, 10)).Borders.LineStyle = xlContinuous '首页加边框Elsexlsheet.Range(xlsheet.Cells(23 + (countpage - 1) * 18, 1), xlsheet.Cells(i, 10)).Borders.LineStyle = xlContinuous '中间页加边框End Ifi = i + 2 '加一条空行'******************************在非尾页写入签名**************************************xlsheet.Range(xlsheet.Cells(i, 1), xlsheet.Cells(i, 10)).MergeCells = Truexlsheet.Cells(i, 1).Value = Space(64) & rst_qm.Fields(0)xlsheet.Rows(i).RowHeight = 30i = i + 1 '换行xlsheet.Range(xlsheet.Cells(i, 1), xlsheet.Cells(i, 10)).MergeCells = Truexlsheet.Cells(i, 1).Value = Space(50) & rst_qm.Fields(1)xlsheet.Rows(i).RowHeight = 15i = i + 1xlsheet.Range(xlsheet.Cells(i, 1), xlsheet.Cells(i, 10)).MergeCells = Truexlsheet.Cells(i, 1).Value = Space(55) & rst_qm.Fields(2)xlsheet.Rows(i).RowHeight = 30'****************************************************************************xlsheet.HPageBreaks.Add (xlsheet.Rows(i + 1)) '添加分页符countpage = countpage + 1 '换页End Ifi = i + 1rst_gcl.MoveNextLoopxlsheet.Range(xlsheet.Cells(23 + (countpage - 1) * 18, 1), xlsheet.Cells(i - 1, 10)).Borders.LineStyle = xlContinuous '尾页加边框i = i + 1 '加入一空行'*********************************在尾页加签名*************************************** xlsheet.Range(xlsheet.Cells(i, 1), xlsheet.Cells(i, 10)).MergeCells = Truexlsheet.Cells(i, 1).Value = Space(64) & rst_qm.Fields(0)xlsheet.Rows(i).RowHeight = 30i = i + 1 '换行xlsheet.Range(xlsheet.Cells(i, 1), xlsheet.Cells(i, 10)).MergeCells = Truexlsheet.Cells(i, 1).Value = Space(50) & rst_qm.Fields(1)xlsheet.Rows(i).RowHeight = 15i = i + 1xlsheet.Range(xlsheet.Cells(i, 1), xlsheet.Cells(i, 10)).MergeCells = Truexlsheet.Cells(i, 1).Value = Space(55) & rst_qm.Fields(2)xlsheet.Rows(i).RowHeight = 30'*********************************************************************************** xls.ActiveWindow.View = xlPageBreakPreview '分页预览xls.ActiveWindow.Zoom = 100If con.State = adStateOpen Thenrst_gcl.Closerst_qm.CloseSet rst_gcl = NothingSet rst_qm = Nothingcon.CloseSet con = NothingEnd IfSet xlsheet = NothingEnd SubOption ExplicitPublic Sub ToExcelTsf(ByRef xlbook, ByRef xls)Dim con As New ADODB.ConnectionDim rst_tsf As New ADODB.RecordsetDim rst_qm As New ADODB.Recordset'**********************************连接数据库************************con.CursorLocation = adUseClientcon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strConnection & ";Persist Security Info=False"con.Openrst_tsf.Open "tdefeiyong", con, adOpenKeyset, adLockOptimistic, adCmdTableIf Not (rst_tsf.BOF And rst_tsf.EOF) Thenrst_tsf.MoveFirstEnd Ifrst_qm.Open "qianming", con, adOpenKeyset, adLockOptimistic, adCmdTablerst_qm.MoveFirst'*********************************工作表初使化**********************************Dim xlsheet As excel.WorksheetSet xlsheet = xlbook.Sheets.Add = "机械台时、组时费汇总表"xlsheet.Columns(1).ColumnWidth = 5xlsheet.Columns(2).ColumnWidth = 20xlsheet.Columns(3).ColumnWidth = 7xlsheet.Columns(4).ColumnWidth = 7xlsheet.Columns(5).ColumnWidth = 7xlsheet.Columns(6).ColumnWidth = 7xlsheet.Columns(7).ColumnWidth = 7xlsheet.Columns(8).ColumnWidth = 7xlsheet.Columns(9).ColumnWidth = 7xlsheet.Columns("A:I").Font.Size = 9xlsheet.Columns("A:I").VerticalAlignment = xlVAlignCenter '垂直居中xlsheet.Columns(1).HorizontalAlignment = xlHAlignCenter '1列水平居中对齐xlsheet.Columns(2).HorizontalAlignment = xlHAlignLeft '2列水平左对齐'******************************写入标头************************************ xlsheet.Rows(1).RowHeight = 35xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, 9)).MergeCells = Truexlsheet.Cells(1, 1).Font.Size = 14xlsheet.Cells(1, 1).Font.Bold = Truexlsheet.Cells(1, 1).Value = "机械台时、组时费汇总表"xlsheet.Cells(2, 9).Value = "单位:元"xlsheet.Range(xlsheet.Cells(3, 1), xlsheet.Cells(5, 1)).MergeCells = Truexlsheet.Cells(3, 1).Value = "编号"xlsheet.Range(xlsheet.Cells(3, 2), xlsheet.Cells(5, 2)).MergeCells = Truexlsheet.Cells(3, 2).Value = "机械名称"xlsheet.Range(xlsheet.Cells(3, 3), xlsheet.Cells(5, 3)).MergeCells = Truexlsheet.Cells(3, 3).Value = "台时费"xlsheet.Range(xlsheet.Cells(3, 4), xlsheet.Cells(3, 9)).MergeCells = Truexlsheet.Cells(3, 4).Value = "其中"xlsheet.Range(xlsheet.Cells(3, 3), xlsheet.Cells(5, 3)).MergeCells = Truexlsheet.Cells(3, 3).Value = "台时费"xlsheet.Range(xlsheet.Cells(4, 4), xlsheet.Cells(5, 4)).MergeCells = Truexlsheet.Cells(4, 4).Value = "折旧费"xlsheet.Range(xlsheet.Cells(4, 5), xlsheet.Cells(5, 5)).MergeCells = Truexlsheet.Cells(4, 5).Value = "修理替换费"xlsheet.Range(xlsheet.Cells(4, 6), xlsheet.Cells(5, 6)).MergeCells = Truexlsheet.Cells(4, 6).Value = "安拆费"xlsheet.Range(xlsheet.Cells(4, 7), xlsheet.Cells(5, 7)).MergeCells = Truexlsheet.Cells(4, 7).Value = "人工费"xlsheet.Range(xlsheet.Cells(4, 8), xlsheet.Cells(5, 8)).MergeCells = Truexlsheet.Cells(4, 8).Value = "燃料费"xlsheet.Range(xlsheet.Cells(4, 9), xlsheet.Cells(5, 9)).MergeCells = Truexlsheet.Cells(4, 9).Value = "其他费"xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(5, 9)).HorizontalAlignment = xlHAlignCenterxls.ActiveSheet.PageSetup.PrintTitleRows = "$1:$5" '固定表头'****************************************写入内容************************************* Dim i As Integeri = 6Do While Not rst_tsf.EOFxlsheet.Cells(i, 1).Value = rst_tsf.Fields("nn")xlsheet.Cells(i, 2).Value = rst_tsf.Fields("name")xlsheet.Cells(i, 3).Value = rst_tsf.Fields("price")xlsheet.Cells(i, 4).Value = rst_tsf.Fields("zhejiu")xlsheet.Cells(i, 5).Value = rst_tsf.Fields("xiuli")xlsheet.Cells(i, 6).Value = rst_tsf.Fields("anchai")xlsheet.Cells(i, 7).Value = rst_tsf.Fields("rengong")xlsheet.Cells(i, 8).Value = rst_tsf.Fields("dongli")xlsheet.Cells(i, 9).Value = rst_tsf.Fields("qita")If i > 22 Thenxls.ActiveWindow.SmallScroll Down:=1 '活动窗口内容向下滚动1行End Ifi = i + 1rst_tsf.MoveNextLoopxlsheet.Range(xlsheet.Cells(6, 3), xlsheet.Cells(i - 1, 9)).NumberFormatLocal = "0.00_ " '保留两位小数'*********************************添加边框********************************** xlsheet.Range(xlsheet.Cells(3, 1), xlsheet.Cells(i - 1, 9)).Borders.LineStyle = xlContinuous '****************************************************************************** xls.ActiveSheet.PageSetup.BottomMargin = Application.InchesToPoints(2.2) '设置下侧面边距xls.ActiveSheet.PageSetup.FooterMargin = Application.InchesToPoints(1) '设置页脚高xls.ActiveSheet.PageSetup.CenterFooter = "&10" & rst_qm.Fields(0) & Chr(10) & Chr(10) &rst_qm.Fields(1) & Chr(10) & Chr(10) & rst_qm.Fields(2) '加页脚xls.ActiveWindow.View = xlPageBreakPreview '分页预览xls.ActiveWindow.Zoom = 100'***************************关闭记录集******************* If con.State = adStateOpen Thenrst_tsf.Closerst_qm.CloseSet rst_tsf = NothingSet rst_qm = Nothingcon.CloseSet con = NothingEnd IfSet xlsheet = NothingEnd Sub精彩的后续作者Blog:/mi6236/。
如何在VB中实现输出到Excelvisual basic 2009-12-04 12:38:22 阅读61 评论0字号:大中小订阅首先要在工程中添加引用“Microsoft Excel 9.0 Object Library”我们使用三个对象Excel.ApplicationExcel.WorkBookExcel.WorkSheet然后我们的目标是:能新建一个Excel文件。
讲某些行列进行合并,设置列宽,填入一个数据,将这个Excel 保存。
Public Sub'定义对象Dim xlApp As Excel.ApplicationDim xlBook As Excel.WorkbookDim xlSheet1 As Excel.WorksheetDim xlSheet2 As Excel.WorksheetSet xlApp = CreateObject("Excel.Application")Set xlBook = xlApp.Workbooks.AddSet xlSheet1 = xlBook.Worksheets("sheet1")Set xlSheet2 = xlBook.Worksheets("sheet2")'参数是下标!!!一定是按照Sheet1,Sheet2,Sheet3这样的顺序来的。
= "值班表" '修改工作簿的名称,就是将显示的名称换掉 = "呼拉拉" '同上xlSheet1.PageSetup.Orientation = xlLandscape '打印设置-- 设置为横向xlSheet1.PageSetup.TopMargin = 20 '一下四部分为设置Excel的显示格式xlSheet1.PageSetup.BottomMargin = 20xlSheet1.PageSetup.LeftMargin = 8xlSheet1.PageSetup.RightMargin = 8xlApp.Visible = True 'Excel文件是不是显示With xlSheet1.Columns.item(1).ColumnWidth() = 2 '列宽大小.Range(.Cells(1, 1), .Cells(3, 1)).Merge '合并.Cells(1, 1).Value = "123" '填入数据End WithxlApp.Visible = False '这样写,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属性。
如何在VB中导出为excel
在我遇到这个问题的时候,我就开始发难了,这个到底怎么做到呢!我就想起了在VB百例中添加了OLE中,对excel文档和word等的修改,我想是不是可以用上呢?于是我就去找VB百例中相关的内容,可是当我找到的时候很是让我失望,看来是我想多了!于是我就是百度,可是当面对那么多的内容我就开始犯难了,到底哪个才是正确的,于是我就开始一个一个看,找我需要的内容,当我觉得有一点头绪的时候,又一个问题开始了,我从VB的菜单栏引用上根本就找不到”Microsoft excel 15.0 object library”,我就从网上查,看到底是在计算机的什么位置,后来在贾文静的帮助下我终于发现了找到我需要引用的控件,现在我来讲讲导出excel的过程!
一:引用Microsoft excel 15.0 object library
看一下定位的位置,点击浏览---找C盘中的program files,然后在按照图上的路径找到咱们需要引用的excel
二:在模块中相关excel代码
三:在需要导出excel的窗体下的click事件下输入一下代码Call exportflexdatatoexcel (myflexgrid1)。
vb导出到excel的方法vb导出到excel的方法//导出Private Sub Command5_Click()If Adodc2.Recordset.RecordCount = 0 ThenMsgBox "没有数据可导出!", vbExclamation, "导出"ElseMsgBox "将把数据导出到EXCLE里,请稍等.......", vbExclamation, "导出"Screen.MousePointer = vbHourglassDim i As IntegerDim j As IntegerDim xlApp As Excel.ApplicationDim xlBook As Excel.WorkbookDim xlSheet As Excel.WorksheetSet xlApp = New Excel.ApplicationSet xlBook = xlApp.Workbooks.addSet xlSheet = xlBook.Worksheets(1)' xlSheet.Cells.Columns. '.AutoFitScreen.MousePointer = 11With xlSheet'EXCLE第一列的宽度.Columns(1).ColumnWidth = 9.15.Columns(2).ColumnWidth = 14.13.Columns(3).ColumnWidth = 14.63.Columns(4).ColumnWidth = 6.5.Columns(5).ColumnWidth = 12.5'字体边框居中.Cells.Font.Size = 9.Cells(1, 1).Borders.LineStyle = 1 '边框.Cells(1, 2).Borders.LineStyle = 1.Cells(1, 3).Borders.LineStyle = 1.Cells(1, 4).Borders.LineStyle = 1.Cells(1, 5).Borders.LineStyle = 1.Cells.HorizontalAlignment = xlCenter.Cells.WrapText = True '自动换行.Cells.EntireColumn.AutoFit '行高根据内容自动调整.Cells.EntireRow.AutoFit'文件名称.name = CStr(Date) '时间为名称'标题列名称.Cells(1, 1) = "t1".Cells(1, 2) = "t2".Cells(1, 3) = "t3".Cells(1, 4) = "t4".Cells(1, 5) = "t5"End WithFor i = 1 To VSFlexGrid5.Rows - 1 '遍历VSFlexGrid5的所有行数For j = 1 To VSFlexGrid5.Cols - 1 '遍历VSFlexGrid5所有的列数str = Trim(VSFlexGrid5.TextMatrix(i, j))'去掉空格回车符str = Replace(str, vbCr, "")str = Replace(str, vbLf, "")xlSheet.Cells(i + 1, j) = Trim(str)'加边框xlSheet.Cells(i + 1, j).Borders.LineStyle = 1'内容靠底部' xlSheet.Range(xlSheet.Cells(i + 1, j), xlSheet.Cells(i + 1, j)).VerticalAlignment = 3' xlSheet.Range(xlSheet.Cells(i + 1, j), xlSheet.Cells(i + 1, j)).HorizontalAlignment = 3NextNextScreen.MousePointer = 0MsgBox "数据已经成功导出!", vbExclamation, "导出"xlApp.Visible = TrueSet xlApp = Nothing 'Excel 处于当前窗体Set xlBook = NothingSet xlSheet = NothingEnd IfEnd Sub。
Excel高级技巧使用VBA编程实现自定义的数据处理任务报表生成和数据导入导出Excel是一款功能强大的电子表格软件,广泛应用于数据处理和报表生成等工作中。
为了更好地满足实际需求,我们可以利用Excel的高级技巧和VBA编程来实现自定义的数据处理任务报表生成和数据导入导出功能。
本文将介绍如何利用Excel高级技巧和VBA编程实现这些功能。
一、数据处理任务报表生成在实际工作中,我们常常需要根据一定的规则和要求对数据进行处理,然后生成相应的报表。
Excel提供了一系列强大的功能和工具,可以帮助我们完成这些任务。
而VBA编程则可以进一步扩展Excel的功能,使其能够应对更复杂的数据处理需求。
1. VBA编程入门在开始使用VBA编程之前,我们需要先了解VBA的基本语法和使用方法。
VBA是一种宏语言,可以通过编写和运行宏代码实现自动化操作。
在Excel中,我们可以通过“开发工具”选项卡中的“Visual Basic”按钮打开VBA编辑器,然后在编辑器中编写和调试代码。
2. 数据处理任务报表需求分析在进行数据处理任务报表生成之前,我们首先需要对需求进行详细的分析。
例如,我们可能需要对一定时间范围内的销售数据进行统计和分析,然后生成销售报表。
在分析需求的过程中,我们需要明确报表的格式、内容和计算规则等。
3. 编写VBA代码实现数据处理任务报表生成一旦我们明确了数据处理任务报表的需求,就可以开始编写VBA代码来实现它。
我们可以利用VBA提供的函数和方法对数据进行处理和计算,然后将结果输出到指定的位置。
在编写VBA代码的过程中,我们需要注意代码的逻辑性和可读性,以方便后续的维护和扩展。
二、数据导入导出功能实现除了数据处理任务报表生成,Excel还可以通过数据导入导出功能实现与其他系统的数据交互。
利用Excel的高级技巧和VBA编程,我们可以更加灵活地导入和导出数据,实现数据的无缝对接。
1. 数据导入需求分析在进行数据导入之前,我们需要先明确导入数据的来源和格式。
VB6.0类模块实现DataGrid表格导出到Excel(原创)将VB中的DataGrid导出到Excel功能网上有很多实例,大家都可以下载后修改修改使用,但是一个程序中多次使用该代码的话,每次都需要修改里面的相关参数,较为麻烦。
作者奉行的理念是“拿来就用”,通过类模块的封装,可以很好的提高代码的重用性,只需要2行代码就可以搞定哦。
本源码复制粘贴后即可使用。
爽吧!如果你用的是其他表格控件,如MSHFlexGrid,则直接将参数中的DataGrid参数换成你的控件类型即可。
如有问题经联系作者****************一、准备工作要想使用本类模块,必须像使用其他导出Excel代码段一样,先引用Microsoft Excel Object Library 。
这是一定要注意的,否则调用该类模块将出错。
二、类模块源码类模块名称:ToExcelOption Explicit'**********************************************************'**函数名:GridToExcel'**输入:needGrid,needAdodc'** :'** :'**输出:'**功能描述:自动将DataGrid表格中的内容导出到Excel'**全局变量:见变量声明'**调用模块:'**作者:吴长平'**日期:2013-1-24 08:45:48'**修改人:吴长平'**日期:'**版本:V1.0.0'**支持:需要引用Excel Object Library'*********************************************************Public Sub GridToExcel(ByVal needGrid As DataGrid, ByVal needAdodc As ADODB.Recordset)'记录集为空时自动报错,并退出过程If needAdodc Is Nothing ThenMsgBox ("参数中的记录集为空!")Exit SubEnd If'定义整数i,jDim i As Integer, j As Integer'定义Excel应用程序对象Dim xlapp As Excel.Application'定义Excel工作薄对象Dim xlbook As Excel.Workbook'定义Excel工作表对象Dim xlsheet As Excel.Worksheet'创建Excel应用程序对象Set xlapp = CreateObject("excel.application") 'Excel应用程序对象可见xlapp.Visible = True'新建工作薄,赋值给xlbookSet xlbook = xlapp.Workbooks.Add'工作薄xlbook的第一个工作表赋值给xlsheet Set xlsheet = xlbook.Worksheets(1)'添加表头For i = 0 To needGrid.Columns.Count - 1xlsheet.Cells(1, i + 1) = needGrid.Columns(i).Caption Next i'循环向Excel表格的单元格中添加内容i = 0'一直输出到记录集的末尾Do While (needAdodc.EOF = False)For j = 0 To Int(needGrid.Columns.Count - 1)needGrid.Col = jxlsheet.Cells(i + 2, j + 1) = needGrid.TextNext j'记录集指针向下移动一条needAdodc.MoveNexti = i + 1Loop'释放Excel工作薄对象Set xlapp = Nothing'释放义Excel工作表对象Set xlbook = NothingEnd Sub三、类模块的使用。
'************************************************************************* '**'** VB将数据导出到EXCEL,没有安装EXCEL的一样也可以导出.'**'** 调用方式: s_Export2Excel(Ado.Recordset) 或s_Export2Excel(Rds.RecordSet) '** 支持Rds 与Ado 的记录导出'**'*************************************************************************'得到所有数据类型,有些数据类型EXCEL不支持,已经替换掉Public Function f_FieldType$(ByV al sType&)Dim iRe$Select Case sTypeCase 2, 3, 20iRe = "int "Case 5iRe = "float "Case 6iRe = "money "Case 131iRe = "numeric "Case 4iRe = "real "Case 128iRe = "binary "Case 204iRe = "varbinary "Case 11iRe = "bit "Case 129, 130iRe = "char "Case 17, 72, 131, 200, 202, 204iRe = "varchar "Case 201, 203iRe = "text "Case 7, 135iRe = "datetime "Case 205iRe = "image "Case 128iRe = "timestamp "End Selectf_FieldType = iReEnd Function'导出ADO记录集到EXCELPublic Function f_Export2Excel(ByV al sRecordSet As ADODB.Recordset, ByV al sExcelFileName$ _, Optional ByV al sTableName$, Optional ByV al sOverExist As Boolean = False) As Boolean'On Error GoTo lbErrDim iConcStr, iSql$, iFdlist$, iDB As ADODB.ConnectionDim iI&, iFdType$, j, TmpField, FileNameDim iRe As Boolean'检查文件名If Dir(sExcelFileName) <> " " ThenIf sOverExist ThenKill sExcelFileNameElseiRe = FalseGoTo lbexitEnd IfEnd If'生成创建表的SQL语句With sRecordSetFor iI = 0 To .Fields.Count - 1iFdType = f_FieldType(.Fields(iI).Type)Select Case iFdTypeCase "char ", "varchar ", "nchar ", "nvarchar ", "varbinary "If .Fields(iI).DefinedSize > 255 TheniSql = iSql & ",[ " & .Fields(iI).Name & "] text "ElseiSql = iSql & ",[ " & .Fields(iI).Name & "] " & iFdType & _"( " & .Fields(iI).DefinedSize & ") "End IfCase "image "Case ElseiSql = iSql & ",[ " & .Fields(iI).Name & "] " & iFdTypeEnd SelectNextIf sTableName = " " Then sTableName = .SourceiSql = "create table [ "& sTableName & "]( " & Mid(iSql,2) & ") "End With'数据库连接字符串iConcStr = "DRIVER={Microsoft Excel Driver (*.xls)};DSN= ' ';FIRSTROWHASNAMES=1;READONLY=FALSE; " & _"CREA TE_DB= " " " & sExcelFileName & " " ";DBQ= " & sExcelFileName'创建Excel文件,并创建表Set iDB = New ADODB.ConnectioniDB.Open iConcStriDB.Execute iSql'插入数据With sRecordSet.MoveFirstWhile .EOF = FalseiSql = " "iFdlist = " "For iI = 0 To .Fields.Count - 1iFdType = f_FieldType(.Fields(iI).Type)If iFdType <> "image " And IsNull(.Fields(iI).V alue) = False TheniFdlist = iFdlist & ",[ " & .Fields(iI).Name & "] "Select Case iFdTypeCase "char ", "varchar ", "nchar ", "nvarchar ", "text "iSql = iSql & ", ' " & .Fields(iI).V alue & " ' "Case "datetime "iSql = iSql & ",# " & .Fields(iI).V alue & "# "Case "image "Case ElseiSql = iSql & "," & .Fields(iI).V alueEnd SelectEnd IfNextiSql = "insert into [ " & sTableName & "]( " & _Mid(iFdlist, 2) & ") values( "& Mid(iSql, 2) & ") "iDB.Execute iSql.MoveNextWendEnd With'处理完毕,关闭数据库iDB.CloseSet iDB = NothingMsgBox "已经将数据保存到[ " & sExcelFileName & " ] ", 64iRe = TrueGoTo lbexitlbErr:MsgBox "发生错误: " & Err.Description & vbCrLf & _"错误代码: " & Err.Number, 64, "错误"lbexit:f_Export2Excel = iReEnd Function。
VB 是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的不便。
因此有很多程序员现在已经充分利用EXECL的强大报表功来实现报表功能。
但由于VB与EXCEL由于分别属于不同的应用系统,如何把它们有机地结合在一起,是一个值得我们研究的课题。
一、VB读写EXCEL表:能获取到表的行数的代码:edRange.Rows.CountVB本身提自动化功能可以读写EXCEL表,其方法如下:1、在工程中引用Microsoft Excel类型库:从"工程"菜单中选择"引用"栏;选择Microsoft Excel 9.0 Object Library(EXCEL2000),然后选择"确定"。
表示在工程中要引用EXCEL类型库。
2、在通用对象的声明过程中定义EXCEL对象:Dim xlApp As Excel.ApplicationDim xlBook As Excel.WorkBookDim xlSheet As Excel.Worksheet3、在程序中操作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有两个自动宏:一个是启动宏(SubAuto_Open()),另一个是关闭宏(Sub Auto_Close())。
它们的特性是:当用EXCEL打含有启动宏的工簿时,就会自动运行启动宏,同理,当关闭含有关闭宏的工作簿时就会自动运行关闭宏。
但是通过VB的自动化功能来调用EXCEL工作表时,启动宏和关闭宏不会自动运行,而需要在VB中通过命令xlBook.RunAutoMacros (xlAutoOpen)和xlBook.RunAutoMacros (xlAutoClose) 来运行启动宏和关闭宏。
Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象Set xlBook = xlApp.Workbooks.Open(App.Path & "\文件名.xls") '打开已经存在的EXCEL工件簿文件xlApp.Visible = True '设置EXCEL对象可见(或不可见)Set xlSheet = xlBook.Worksheets("sheel1") '设置活动工作表,sheet1表示表名,可以使用字符型变量代替。
xlSheet.Activate '激活工作表,让它处于前台活动中。
xlBook.RunAutoMacros (xlAutoOpen) '运行自动开启宏Macro1(),在EXCEL中加入以下宏'Sub auto_open() '这是VBA中的自动打开时运行的宏' 您要宏自动运行的程序,比如可以call其它的宏,这样VB在打开EXCEL时,使用上面的语句就可以先运行这个宏'End SubxlSheet.Cells.Item(行数,列数) =值'给EXCEL对象中的表的单元格附值。
xlSheet.Rows("7:7").Select '选定EXCEL表的第7行xlApp.Selection.Delete shift:=xlUp '删除选定的行xlSheet.Rows(7).Insert '在第7行处插入一行ActiveSheet.PageSetup.CenterHeader ="页眉内容" '给页眉附值xlSheet.Range("f7:h7").Select '选定f7:h7之间的单元格,下面的程序是把它们合并。
Application.CutCopyMode = FalseWith xlApp.Selection.HorizontalAlignment = xlGeneral.V erticalAlignment = xlCenter.WrapText = False.Orientation = 0.AddIndent = False.IndentLevel = 0.ShrinkToFit = False.ReadingOrder = xlContext.MergeCells = TrueEnd With如果有自己不会的可以用录制宏的办法,用手功操作一次你要的功能,然后看录下的宏程序,VBA中的宏程序几乎所有的宏在VB中都可以直接使用,关键是对象一定要搞清楚。
VB操作EXCEL的介绍全面控制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:ExcelDemo.xls' );5) 设置第2个工作表为活动工作表:ExcelID.WorkSheets[2].Activate;或ExcelID.WorkSheets[ 'Sheet2' ].Activate;6) 给单元格赋值:ExcelID.Cells[1,4].V alue := '第一行第四列';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;参考代码:ActiveSheet.HPageBreaks(1).Location = Range("A22")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.CenterV ertically := 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:ExcelDemo1.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>F or 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 & 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.PageSetup.Orientation = xlLandscape ‘设置打印方向(横向) ’给工作表加密码objExl.ActiveSheet.Protect "123", DrawingObjects:=True, _Contents:=True, Scenarios:=TrueobjExl.Application.IgnoreRemoteRequests = FalseobjExl.Visible = True ’使EXCEL可见objE xl.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。