本帖最后由 wangxiaoyi2 于 2010-04-02 10:06:40 编辑

解决方案 »

  1.   

    在你的 excel模板 的 Workbook_Open() 事件代码中,打开文件并读取数据就行了。
      

  2.   

    参考代码:
    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
      

  3.   

    在excel的vba中的
    Thisworkshop中的
    Private Sub Workbook_Open()
       // 打开文件并读取数据
    End Sub
      

  4.   

    如果明确要取的数据在工作表的区域和数据比较多的话,用内存数组做吧,快多了。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
      

  5.   

    模板和数据如上,麻烦【Chen8013】和【pandaohua】在帮帮忙,谢谢!
      

  6.   

    6楼的意思是,而你的采集模板的工作表格式是定好的,不同单元格的值可能要从 你的 数据表上采集,而且可能是不连续的,但是6楼如何知道 你的模块的 A1 单元格 的值 采自于  数据表 的哪个 单元格?他这是举个例子而已, 你自己都在搞项目了,难道这点简单道理都不知道?VBA 是比较简单的。
      

  7.   

    我知道他说的道理,没搞过VBA,所以对它有点陌生。
    模板类似:
    学生姓名           性别         学号          地址
    studentname       sex         id          adresscsv数据是这样的:
    张三                 男          A001        北京市西城区
    李四                 男          A002        北京市海淀区
    ..                ..          ..             ....                ..          ..             ..我的意图是将数据分别赋值到studentname ,sex,id,adress
      

  8.   

    '假设在你的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
    '上面的代码我随便写了两个例子,具体的你可去这个网站
     
      

  9.   

    '第一种方法 ADO
    Private Sub Workbkook_Open() '快这里为测试多了个字母,改成下面的
    Private Sub Workbook_Open() '快