现有段程序,关键原代码如下:
cn2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filename & " ;Persist Security Info=False;Extended Properties= 'Excel 8.0;HDR=NO'"
cn2.open
rs2.open "select   *   from   [Sheet1$] ", cn2, adOpenDynamic, adLockOptimistic
这样就只能显示默认名字为工作表叫sheet1的内容,但我现在有一个表有两个工作表,分别为“材料”、“价格”、我想实现的功能为:用一个combo显示此表中的所有工作表名称,即下拉combo时可选择“材料”跟“价格”工作表,点击“确认”按钮后导入对应的工作表内容,请问:1、红色[Sheet1$]部分如何修改?2、combo中的内容如何添加?

解决方案 »

  1.   

    "select * from [" & combobox1.text & "$]"
      

  2.   

    楼上的,我明白你的意思了,谢谢!
    但是combobox中的text又怎么跟我要显示的表格的单元表对应呢??我要导入的表是通过CommonDialog1导入的,所以工作表每次都不一样?
      

  3.   

    CommonDialog1导入后把sheet名称添加到combobox
      

  4.   

    对了,但我要的就是如何把sheet的名称添加到combobox中?
    combobox1.additem "worksheet.name"这样对吗??
      

  5.   

    本帖最后由 bcrun 于 2010-08-18 20:59:24 编辑
      

  6.   

    还是不行呢
    可能是我没有解释清楚,我再把解释一下。
    通过点击一个command控件用commondialog选择任意表,表的名称显示在一个textbox中,同时将选择的表中的工作薄(默认为sheet1、sheet2等)显示在一个combo的下拉框中,如我问题中的“材料”、“价格”,选择任何一个工作薄后,点击“打开表”按钮将此工作薄中的内容显示在datagrid中,我用的是adodc连接datagrid,原代码如下:
    Dim fso As New FileSystemObject, ts As TextStream
        CommonDialog1.Filter = "EXCEL文件(*.xls)|*.xls"    '打开EXCEL文件
        CommonDialog1.ShowOpen
      If CommonDialog1.filename = "" Then
         MsgBox "没有选择文件"
       Else
          If fso.FileExists(CommonDialog1.filename) Then
          Set ts = fso.OpenTextFile(CommonDialog1.filename)
            Dim filename As String
    Dim cn2     As New ADODB.Connection
            Dim rs2  As New ADODB.Recordset
            Dim mystr As String
            rs2.CursorLocation = adUseClient
            filename = CommonDialog1.filename
            DataGrid1 = ts.ReadAll
            ts.Close
            Me.Caption = CommonDialog1.FileTitle
            cn2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filename & " ;Persist Security Info=False;Extended Properties= 'Excel 8.0;HDR=NO'"
            cn2.open
    For Each newsheet In ThisWorkbook.Sheets
            Combo1.AddItem newsheet.name
            rs2.open "select   *   from   [&sheet1 ] ", cn2, adOpenDynamic, adLockOptimistic
            Set DataGrid1.DataSource = rs2
            Next
    end if 
    end if 
    以上代码只能打开选择的表中默认的sheet1中的内容,现在我就是想通过选择不同的工作薄名称显示不同的工作薄内容。
    按照你的说法,是需要新建一个工作表跟工作薄吗?而我这里用的是: cn2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filename & " ;Persist Security Info=False;Extended Properties= 'Excel 8.0;HDR=NO'",会不会有冲突?
      

  7.   

    你的逻辑没有理清,要分开来写先打开文件,添加combobox (比如点击command1)
    再选择sheet(比如在combobox里选)再查询数据 (比如点击command2)
      

  8.   

    不是三个按钮点击command1在combobox里选点击command2
      

  9.   

    OK,是我回太快了
    我明白你的意思了
    那代码呢??
    THANX!
      

  10.   

    5楼的说的很全面了。楼主,操作EXCEL,咋弄上ADO了?直接操作EXCEL对象吗