请问在VB中如何快速地将EXCEL中的数据赋值给一个数组,如果用循环去赋值太慢了!比方说我有一个数组DATASOURCE(100,2) 那么我如何快速的将“A1,B200"这个区域的数据赋值给数组DATASOURCE。不要使用循环,太慢了。谢谢大家!

解决方案 »

  1.   

    如果数据量大的话,把选中部分保存成CSV文件再解析文本可能会快点本来想考虑用粘贴板的,没有想到Excel拷贝的只是一个地址
      

  2.   

    Dim DATASOURCEDATASOURCE = MySheet.Range("A1:A1", "B200:B200")
      

  3.   

    使用QUERY.
    将RecordSet赋给QUERY
      

  4.   

    Dim Irowcount As Integer
        Dim Icolcount As Integer
        
        Dim xlApp As New Excel.Application
        Dim xlBook As Excel.Workbook
        Dim xlSheet As Excel.Worksheet
        Dim xlQuery As Excel.QueryTable
        
        
        With Rs_Data
            If .RecordCount < 1 Then
                MsgBox ("没有记录!")
                Exit Function
            End If
            '记录总数
            Irowcount = .RecordCount
            '字段总数
            Icolcount = .Fields.Count
        End With
        
        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = Nothing
        Set xlSheet = Nothing
        Set xlBook = xlApp.Workbooks().Add
        Set xlSheet = xlBook.Worksheets("sheet1")
        xlApp.Visible = True
        
        
        Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Range("a1"))
          '添加查询语句,导入EXCEL数据
          
        With xlQuery
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = True
            .SaveData = True
            .AdjustColumnWidth = False
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
        End With
        
        xlQuery.FieldNames = True '显示字段名
        xlQuery.RefreshRs_Data就是你传递过来的记录集
      

  5.   

    atila1978() :   你好,谢谢你的回复,可是我还是有几个地方不太明白,,烦请你多多指教,谢谢!
     
     1.Rs_Data是一个什么类型的数据呢?
     2.我如何来给Rs_Data赋值呢?
     3.我看你的程序中使用了Query,这是不是需要数据库方面的知识呢?而我在这方面可以说是一无所知,^.^.....
    我水平有限,给你添麻烦了,多多包涵了,呵呵,,
      

  6.   

    to: leolan(史留香) :
      你好,如果我使用你的方法是可以加快速度,但是由于我要对DATASOURCE中的一部分数组进行处理,所以如何定位呢?望多多指教,谢谢!  我试着定义DATASOURCE为一个二元数组,但不能直接赋值给它,必须采用循环才行吗?Dim DATASOURCE
    DATASOURCE = MySheet.Range("A1:A1", "B200:B200")
      

  7.   

    有一个微软提供的现成的方法:
    1 用 ADO Recordset 打开 Excel 数据集。
    2 用 GetRows 方法将数据直接赋值给一个数组。Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim DATASOURCE As Variantcn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
               "Data Source=C:\Book1.xls;" & _
               "Extended Properties=""Excel 8.0;"""
    rs.Open "Select * from [Sheet1$A1:B200]", cn, adOpenStaticDATASOURCE = rs.GetRows()返回的是一个二维数组,第一下标指示列,第二下标指示行。
      

  8.   

    哈哈,终于搞定,原来如此简单,还是 of123() ( ) 的方法提醒了我,多谢了, 其实也不用ADO去读取数据,(因为我这方而是一点都不懂,^_^),直接在开始的时候定义一个变量为变体型的,Dim DATASOURCE As Variant,然后直接把EXCEL中的数据赋值给它, DATASOURCE=.....RANGE(“A1:B200") 这样之后DATASOURCE就变成了数组型的,呵呵,可以按数组的方式去操作了,不过要注意维数的对应关系。
      再次感谢大家的帮助,谢谢了,没有你们的提示也不会有这么快呀,,呵呵,,
      

  9.   

    怎么感觉到你还是在操作Excel中的对象,会比Cells(x,y)这样取值快?