vb操作excel的常见方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【VB源码】vb6.0中读取excel中的数据
来源:初月岛 发布时间:2010-03-08 查看次数:326 vb6.0中读取excel中的数据,并把数据填写到vb中的textbox上实例: Private Sub Command3_Click() Dim Conn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim i As Integer Dim sql As String
VBA数据类型概述 以下表格显示所支持的数据类型,以及存储空间大小与范围。
数据类型
Byte Boolean Integer Long (长整型) Single (单精度浮点型)
Double (双精度浮点型) Currency (变比整型) Decimal Date Object String (变长) String (定长) Variant (数字) Variant (字符) 用户自定义 (利用 Type)
VB中操作Excel的一般做法(读取)
- 中国WEB开发者网络 (http://www.webasp.net) -- 技术教程 (http://www.webasp.net/article/) --- VB中操作Excel的一般做法(读取) (http://www.webasp.net/article/28/27242.htm)
'On Error Resume Next strName = App.Path & "\\book.xls" 'EXCEL文件名
strSheetName = "sheet1" 'EXCEL表名 Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strName & ";Extended Properties='Excel 8.0;HDR=Yes'" '连接EXCEL文件 sql = "select. * from [" & strSheetName & "$]" '打开EXCEL表 rs.Open sql, Conn, 3, 3 MsgBox rs.RecordCount '显示表里的记录数 Do Until rs.EOF For i = 0 To rs.Fields.Count - 1 '读一行数据 List1.AddItem rs.Fields.Item(i).Name '读出数据,添加到list1里 If Not IsNull(rs.Fields.Item(i).Value) Then List2.AddItem rs.Fields.Item(i).Value Else rs.Update rs.Fields.Item(i).Value = i ' "peter" & i rs.Update End If Next i rs.MoveNext Loop rs.Close '关闭数据集 Conn.Close '关闭对象 End Sub
If msg = vbYes Then ActiveWorkbook.Save Else If msg = vbCancel Then Exit Sub Call runtimer '如果用户没有选择取消就再次调用 Runtimer End Sub
以上只是两个简单的例子,有兴趣的话,可以利用 Application.Ontime 这个函数写出更多更有用的定时程序
方法2:尽量减少使用对象引用,尤其在循环中
每一个Excel对象的属性、方法的调用都需要通过OLE接口的一个或多个调用,这些OLE调 用都是需要时间的,减少使用对象引用能加快VBA代码的运行。例如
1.使用With语句。
Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.Name=″Pay″ Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.FontStyle=″Bold″ ...
注意 任何数据类型的数组都需要 20 个字节的内存空间,加上每一数组维数占 4 个字节,再加上数
据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例
如,以 4 个 2 字节之 Integer 数据元所组成的一维数组中的数据,占 8 个字节。这 8 个字节加
上额外的 24 个字节,使得这个数组所需总内存空间为 32 个字节。 包含一数组的 Variant 比单独的一个数组需要多 12 个字节
提高Excel中VBA的效率
提 高 E由xc于el中MVicBrAo的so效ft 率Office办公套件的广泛应用,以及该软件版本的不断提升,功能不断完善, 在Office办公套件平台上开发出的的VBA应用程序越来越多,而VBA是一种宏语言,在运行速 度上有很大的限制。因此VBA编程的方法直接关系到VBA程序运行的效率,本文列举了一些提 方高 法V B1由A:程于尽序E量x运c使e行用l对V效象B率A多原的达有方百的法属多。性个、,方对法象和的W属or性ks、hee方t函法数、事件多不胜数,对于初学者来说可能对 它们不全部了解,这就产生了编程者经常编写与Excel对象的属性、方法相同功能的VBA代码 段,而这些代码段的运行效率显然与Excel对象的属性、方法完成任务的速度相差甚大。例如 用Range的属性CurrentRegion来返回Range 对象,该对象代表当前区。(当前区指以任意空 白行及空白列的组合为边界的区域)。同样功能的VBA代码需数十行。因此编程前应尽可能多 地 了 解充E分xc利el用对W象o的rk属sh性ee、t函方数法是。提高程序运行速度的极度有效的方法。如求平均工资的例子:
如何在Excel里使用定时器
如用何过在EExxcceell里97使里用的定加时载器宏 "定时保存" 吗?可惜它的源程序是加密的,现在就上传一篇介绍实 现在它O的ffic文e 档里。有个方法是 application.ontime ,具体函数如下: expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule) 如这果个想函进数一是步用了来解安,排请一参个阅过程Ex在ce将l 的来帮的助特。定时间运行,(可为某个日期的指定时间,也可为 指定的时间段之后)。通过这个函数我们就可以在 Excel 里编写自己的定时程序了。下面就举 两1.在个下例午子来17说:00明:0它0 的。时候显示一个对话框。 Sub Run_it() Application.OnTime TimeValue("17:00:00"), "Show_my_msg" '设置定时器在 17:00:00 激活,激活后运行 Show_my_msg 。 End Sub Sub Show_my_msg() msg = MsgBox("现在是 17:00:00 !", vbInformation, "自定义信息") End Sub 2.模仿 Excel 97 里的 "自动保存宏",在这里定时 5 秒出现一次 Sub auto_open() MsgBox "欢迎你,在这篇文档里,每 5 秒出现一次保存的提示!", vbInformation, "请注意!" Call runtimer '打开文档时自动运行 End Sub Sub runtimer() Application.OnTime Now + TimeValue("00:00:05"), "saveit" ' Now + TimeValue("00:15:00") 指定在当前时间过 5 秒钟开始运行 Saveit 这个过程。 End Sub Sub SaveIt() msg = MsgBox("朋友,你已经工作很久了,现在就存盘吗?" & Chr(13) _ & "选择是:立刻存盘" & Chr(13) _ & "选择否:暂不存盘" & Chr(13) _ & "选择取消:不再出现这个提示", vbYesNoCancel + 64, "休息一会吧!") '提示用户保存当前活动文档。
则以下语句比上面的快 With Workbooks(1).Sheets(1).Range(″A1:A1000″).Font .Name = ″Pay″ .FontStyle = ″Bold″ ... End With
2.使用对象变量。
如果你发现一个对象引用被多次使用,则你可以将此对象用Set 设置为对象变量,以减少 对对象的访问。如: Workbooks(1).Sheets(1).Range(″A1″).Value = 100 Workbooks(1).Sheets(1).Range(″A2″).Value = 200 则以下代码比上面的要快: SetΒιβλιοθήκη BaiduMySheet = Workbooks(1).Sheets(1) MySheet.Range(″A1″).Value = 100 MySheet.Range(″A2″).Value = 200
-- 作者:未知 -- 发布日期: 2006-02-07
1、定义Excel操作变量 Dim objExcelFile As Excel.Application Dim objWorkBook As Excel.Workbook Dim objImportSheet As Excel.Worksheet 2、打开Excel进程,并打开目标Excel文件 Set objExcelFile = New Excel.Application objExcelFile.DisplayAlerts = False Set objWorkBook = objExcelFile.Workbooks.Open(strFileName) Set objImportSheet = objWorkBook.Sheets(1) 3、获取Excel有效区域的行和列数 intLastColNum = objImportSheet.UsedRange.Columns.Count intLastRowNum = objImportSheet.UsedRange.Rows.Count 4、逐行读取Excel中数据 由于前两行为Header部分,所以需要从第三行读取 如果第1到第10个单元格的值均为空或空格,则视为空行 For intCountI = 3 To intLastRowNum ''Check if Empty Data Row blnNullRow = True For intI = 1 To 10 If Trim$(objImportSheet.Cells(intCountI, intI).Value) <> "" Then blnNullRow = False End If Next intI 若不是空行,则进行读取动作,否则继续向后遍历Excel中的行 If blnNullRow = False Then 获取单元格中的数据,做有效性Check,并将合法数据创建为实体存入对象数组中 objImportSheet.Cells(intCountI, 1).Value …… End If Next intCountI 5、退出Excel进程,并关闭Excel相关操作对象 objExcelFile.Quit Set objWorkBook = Nothing Set objImportSheet = Nothing Set objExcelFile = Nothing
For Each c In Worksheet(1).Range(″A1:A1000″)
TotalValue = TotalValue + c.Value Next AverageValue = TotalValue / Worksheet(1).Range(″A1:A1000″).Rows.Count 而 下Av面era代g码eV程alu序e=比A上pp面lic例at子ion快.W得o多rks:heetFunction.Average(Worksheets(1).Range(″ A 1 :A其10它00函″))数如Count,Counta,Countif,Match,Lookup等等,都能代替相同功能的VBA程序代 码,提高程序的运行速度。
来源:初月岛 发布时间:2010-03-08 查看次数:326 vb6.0中读取excel中的数据,并把数据填写到vb中的textbox上实例: Private Sub Command3_Click() Dim Conn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim i As Integer Dim sql As String
VBA数据类型概述 以下表格显示所支持的数据类型,以及存储空间大小与范围。
数据类型
Byte Boolean Integer Long (长整型) Single (单精度浮点型)
Double (双精度浮点型) Currency (变比整型) Decimal Date Object String (变长) String (定长) Variant (数字) Variant (字符) 用户自定义 (利用 Type)
VB中操作Excel的一般做法(读取)
- 中国WEB开发者网络 (http://www.webasp.net) -- 技术教程 (http://www.webasp.net/article/) --- VB中操作Excel的一般做法(读取) (http://www.webasp.net/article/28/27242.htm)
'On Error Resume Next strName = App.Path & "\\book.xls" 'EXCEL文件名
strSheetName = "sheet1" 'EXCEL表名 Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strName & ";Extended Properties='Excel 8.0;HDR=Yes'" '连接EXCEL文件 sql = "select. * from [" & strSheetName & "$]" '打开EXCEL表 rs.Open sql, Conn, 3, 3 MsgBox rs.RecordCount '显示表里的记录数 Do Until rs.EOF For i = 0 To rs.Fields.Count - 1 '读一行数据 List1.AddItem rs.Fields.Item(i).Name '读出数据,添加到list1里 If Not IsNull(rs.Fields.Item(i).Value) Then List2.AddItem rs.Fields.Item(i).Value Else rs.Update rs.Fields.Item(i).Value = i ' "peter" & i rs.Update End If Next i rs.MoveNext Loop rs.Close '关闭数据集 Conn.Close '关闭对象 End Sub
If msg = vbYes Then ActiveWorkbook.Save Else If msg = vbCancel Then Exit Sub Call runtimer '如果用户没有选择取消就再次调用 Runtimer End Sub
以上只是两个简单的例子,有兴趣的话,可以利用 Application.Ontime 这个函数写出更多更有用的定时程序
方法2:尽量减少使用对象引用,尤其在循环中
每一个Excel对象的属性、方法的调用都需要通过OLE接口的一个或多个调用,这些OLE调 用都是需要时间的,减少使用对象引用能加快VBA代码的运行。例如
1.使用With语句。
Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.Name=″Pay″ Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.FontStyle=″Bold″ ...
注意 任何数据类型的数组都需要 20 个字节的内存空间,加上每一数组维数占 4 个字节,再加上数
据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例
如,以 4 个 2 字节之 Integer 数据元所组成的一维数组中的数据,占 8 个字节。这 8 个字节加
上额外的 24 个字节,使得这个数组所需总内存空间为 32 个字节。 包含一数组的 Variant 比单独的一个数组需要多 12 个字节
提高Excel中VBA的效率
提 高 E由xc于el中MVicBrAo的so效ft 率Office办公套件的广泛应用,以及该软件版本的不断提升,功能不断完善, 在Office办公套件平台上开发出的的VBA应用程序越来越多,而VBA是一种宏语言,在运行速 度上有很大的限制。因此VBA编程的方法直接关系到VBA程序运行的效率,本文列举了一些提 方高 法V B1由A:程于尽序E量x运c使e行用l对V效象B率A多原的达有方百的法属多。性个、,方对法象和的W属or性ks、hee方t函法数、事件多不胜数,对于初学者来说可能对 它们不全部了解,这就产生了编程者经常编写与Excel对象的属性、方法相同功能的VBA代码 段,而这些代码段的运行效率显然与Excel对象的属性、方法完成任务的速度相差甚大。例如 用Range的属性CurrentRegion来返回Range 对象,该对象代表当前区。(当前区指以任意空 白行及空白列的组合为边界的区域)。同样功能的VBA代码需数十行。因此编程前应尽可能多 地 了 解充E分xc利el用对W象o的rk属sh性ee、t函方数法是。提高程序运行速度的极度有效的方法。如求平均工资的例子:
如何在Excel里使用定时器
如用何过在EExxcceell里97使里用的定加时载器宏 "定时保存" 吗?可惜它的源程序是加密的,现在就上传一篇介绍实 现在它O的ffic文e 档里。有个方法是 application.ontime ,具体函数如下: expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule) 如这果个想函进数一是步用了来解安,排请一参个阅过程Ex在ce将l 的来帮的助特。定时间运行,(可为某个日期的指定时间,也可为 指定的时间段之后)。通过这个函数我们就可以在 Excel 里编写自己的定时程序了。下面就举 两1.在个下例午子来17说:00明:0它0 的。时候显示一个对话框。 Sub Run_it() Application.OnTime TimeValue("17:00:00"), "Show_my_msg" '设置定时器在 17:00:00 激活,激活后运行 Show_my_msg 。 End Sub Sub Show_my_msg() msg = MsgBox("现在是 17:00:00 !", vbInformation, "自定义信息") End Sub 2.模仿 Excel 97 里的 "自动保存宏",在这里定时 5 秒出现一次 Sub auto_open() MsgBox "欢迎你,在这篇文档里,每 5 秒出现一次保存的提示!", vbInformation, "请注意!" Call runtimer '打开文档时自动运行 End Sub Sub runtimer() Application.OnTime Now + TimeValue("00:00:05"), "saveit" ' Now + TimeValue("00:15:00") 指定在当前时间过 5 秒钟开始运行 Saveit 这个过程。 End Sub Sub SaveIt() msg = MsgBox("朋友,你已经工作很久了,现在就存盘吗?" & Chr(13) _ & "选择是:立刻存盘" & Chr(13) _ & "选择否:暂不存盘" & Chr(13) _ & "选择取消:不再出现这个提示", vbYesNoCancel + 64, "休息一会吧!") '提示用户保存当前活动文档。
则以下语句比上面的快 With Workbooks(1).Sheets(1).Range(″A1:A1000″).Font .Name = ″Pay″ .FontStyle = ″Bold″ ... End With
2.使用对象变量。
如果你发现一个对象引用被多次使用,则你可以将此对象用Set 设置为对象变量,以减少 对对象的访问。如: Workbooks(1).Sheets(1).Range(″A1″).Value = 100 Workbooks(1).Sheets(1).Range(″A2″).Value = 200 则以下代码比上面的要快: SetΒιβλιοθήκη BaiduMySheet = Workbooks(1).Sheets(1) MySheet.Range(″A1″).Value = 100 MySheet.Range(″A2″).Value = 200
-- 作者:未知 -- 发布日期: 2006-02-07
1、定义Excel操作变量 Dim objExcelFile As Excel.Application Dim objWorkBook As Excel.Workbook Dim objImportSheet As Excel.Worksheet 2、打开Excel进程,并打开目标Excel文件 Set objExcelFile = New Excel.Application objExcelFile.DisplayAlerts = False Set objWorkBook = objExcelFile.Workbooks.Open(strFileName) Set objImportSheet = objWorkBook.Sheets(1) 3、获取Excel有效区域的行和列数 intLastColNum = objImportSheet.UsedRange.Columns.Count intLastRowNum = objImportSheet.UsedRange.Rows.Count 4、逐行读取Excel中数据 由于前两行为Header部分,所以需要从第三行读取 如果第1到第10个单元格的值均为空或空格,则视为空行 For intCountI = 3 To intLastRowNum ''Check if Empty Data Row blnNullRow = True For intI = 1 To 10 If Trim$(objImportSheet.Cells(intCountI, intI).Value) <> "" Then blnNullRow = False End If Next intI 若不是空行,则进行读取动作,否则继续向后遍历Excel中的行 If blnNullRow = False Then 获取单元格中的数据,做有效性Check,并将合法数据创建为实体存入对象数组中 objImportSheet.Cells(intCountI, 1).Value …… End If Next intCountI 5、退出Excel进程,并关闭Excel相关操作对象 objExcelFile.Quit Set objWorkBook = Nothing Set objImportSheet = Nothing Set objExcelFile = Nothing
For Each c In Worksheet(1).Range(″A1:A1000″)
TotalValue = TotalValue + c.Value Next AverageValue = TotalValue / Worksheet(1).Range(″A1:A1000″).Rows.Count 而 下Av面era代g码eV程alu序e=比A上pp面lic例at子ion快.W得o多rks:heetFunction.Average(Worksheets(1).Range(″ A 1 :A其10它00函″))数如Count,Counta,Countif,Match,Lookup等等,都能代替相同功能的VBA程序代 码,提高程序的运行速度。