参考代码: Private Sub Workbook_Open() Dim i& Workbooks.Open "X:\TEMP\book2.csv" For i = 1 To 5 Debug.Print Cells(i, 1).Value Next End Sub
在excel的vba中的 Thisworkshop中的 Private Sub Workbook_Open() // 打开文件并读取数据 End Sub
如果明确要取的数据在工作表的区域和数据比较多的话,用内存数组做吧,快多了。Private Sub Workbook_Open() Dim i&, ar As Variant, wk As Workbook Set wk = Workbooks.Open(ThisWorkbook.Path & "\book1.csv") ar = wk.Sheets("sheet1").Range("a1:a5") For i = 1 To UBound(ar) Debug.Print ar(i, 1) Next wk.Close False End Sub
'假设在你的C盘有个 csv 文件 数据库.csv ,在表名为 Sheet1 第 1 行是标题, 里面有 四个字段 A列(studentname),B列(sex),C列(id), D列(adress),数据从第 2 行开始到第100行 '举2种比较常用的 '第一种方法 ADO Private Sub Workbkook_Open() '快 Dim cnn As New ADODB.Connection cnn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=C:\;Extensions=asc,csv,tab,txt;Persist Security Info=True" '而你的表是 A列(id),B列(studentname),C列(sex),D列(adress),而且想在 a5单元格填入数据,那么如下, 注意顺序 Range("a5").CopyFromRecordset cnn.Execute("select id,studentname,sex,adress from [book1.csv]") cnn.CloseEnd Sub'第二种方法 ,内存数组, 2个字 " 特快 " Private Sub Workbook_Open() Dim i&, ar As Variant, wk As Workbook Dim k As Long, arr() Set wk = Workbooks.Open("c:\book1.csv") ar = wk.Sheets("Sheet1").Range("a2:d100") '记住工作表中得到的数组下标为1 wk.Close False For i = 1 To UBound(ar) If ar(i, 1) = "张三" Then k = k + 1 ReDim Preserve arr(1 To 4, 1 To k) '注意这个数组需要转置 arr(1, k) = ar(i, 1) arr(2, k) = ar(i, 2) arr(3, k) = ar(i, 3) arr(4, k) = ar(i, 4) End If Next Range("a5").Resize(k, 4) = Application.Transpose(arr) End Sub'第三种就是 利用工作表的 导入外部连接 等等....方法有好几种 '如果是企业用,尽量让科室的搞EXCEL,WORD,ACCESS等等的到 <<< WWW.EXCELHOME.NET >>> '那个网站也有很多战友在这个CSDN上有注册,是好几届 的 MVP '上面的代码我随便写了两个例子,具体的你可去这个网站
'第一种方法 ADO Private Sub Workbkook_Open() '快这里为测试多了个字母,改成下面的 Private Sub Workbook_Open() '快
Private Sub Workbook_Open()
Dim i&
Workbooks.Open "X:\TEMP\book2.csv"
For i = 1 To 5
Debug.Print Cells(i, 1).Value
Next
End Sub
Thisworkshop中的
Private Sub Workbook_Open()
// 打开文件并读取数据
End Sub
Dim i&, ar As Variant, wk As Workbook
Set wk = Workbooks.Open(ThisWorkbook.Path & "\book1.csv")
ar = wk.Sheets("sheet1").Range("a1:a5")
For i = 1 To UBound(ar)
Debug.Print ar(i, 1)
Next
wk.Close False
End Sub
模板类似:
学生姓名 性别 学号 地址
studentname sex id adresscsv数据是这样的:
张三 男 A001 北京市西城区
李四 男 A002 北京市海淀区
.. .. .. .... .. .. ..我的意图是将数据分别赋值到studentname ,sex,id,adress
'举2种比较常用的
'第一种方法 ADO
Private Sub Workbkook_Open() '快
Dim cnn As New ADODB.Connection
cnn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=C:\;Extensions=asc,csv,tab,txt;Persist Security Info=True"
'而你的表是 A列(id),B列(studentname),C列(sex),D列(adress),而且想在 a5单元格填入数据,那么如下, 注意顺序
Range("a5").CopyFromRecordset cnn.Execute("select id,studentname,sex,adress from [book1.csv]")
cnn.CloseEnd Sub'第二种方法 ,内存数组, 2个字 " 特快 "
Private Sub Workbook_Open()
Dim i&, ar As Variant, wk As Workbook
Dim k As Long, arr()
Set wk = Workbooks.Open("c:\book1.csv")
ar = wk.Sheets("Sheet1").Range("a2:d100") '记住工作表中得到的数组下标为1
wk.Close False
For i = 1 To UBound(ar)
If ar(i, 1) = "张三" Then
k = k + 1
ReDim Preserve arr(1 To 4, 1 To k) '注意这个数组需要转置
arr(1, k) = ar(i, 1)
arr(2, k) = ar(i, 2)
arr(3, k) = ar(i, 3)
arr(4, k) = ar(i, 4)
End If
Next
Range("a5").Resize(k, 4) = Application.Transpose(arr)
End Sub'第三种就是 利用工作表的 导入外部连接 等等....方法有好几种
'如果是企业用,尽量让科室的搞EXCEL,WORD,ACCESS等等的到 <<< WWW.EXCELHOME.NET >>>
'那个网站也有很多战友在这个CSDN上有注册,是好几届 的 MVP
'上面的代码我随便写了两个例子,具体的你可去这个网站
Private Sub Workbkook_Open() '快这里为测试多了个字母,改成下面的
Private Sub Workbook_Open() '快