编一个小程序,用VB读取EXCEL表中SHEET1中的数据.
A列数据--客户名称,B列--产品名称,C列--产品单价.一个客户有很多种产品.现想编一个小程序,随便选几个客户的一些产品显示打印出来.
如:选中客户A的产品A1,
选中客户A的产品A2,
选中客户B的产品A3
....
选中这些产品显示出来后再打印出来.
我想把客户名称读取到COMBOBOX1中(去掉重复),然后根据COMBOBOX1中读取的客户名称去选取它的产品到COMBOBOX2中,然后在下方显示出来(想用表格的式样,但不知用什么控件可以实现),然后再打印出来.
想要一套完整的源代码,从读取EXCEL表到打印出结果.
新手,谢谢!
A列数据--客户名称,B列--产品名称,C列--产品单价.一个客户有很多种产品.现想编一个小程序,随便选几个客户的一些产品显示打印出来.
如:选中客户A的产品A1,
选中客户A的产品A2,
选中客户B的产品A3
....
选中这些产品显示出来后再打印出来.
我想把客户名称读取到COMBOBOX1中(去掉重复),然后根据COMBOBOX1中读取的客户名称去选取它的产品到COMBOBOX2中,然后在下方显示出来(想用表格的式样,但不知用什么控件可以实现),然后再打印出来.
想要一套完整的源代码,从读取EXCEL表到打印出结果.
新手,谢谢!
Dim objExcelFile As Excel.Application
Dim objWorkBook As Excel.Workbook
Dim objImportSheet As Excel.Worksheet
Dim strFileName As String
Dim intLastColNum As Integer
Dim intLastRowNum As Long
Dim CountI As Long
dim j as integer
dim Inti as integer strFileName = CommonDialog1.FileName '引用Commondialog控件
Set objExcelFile = New Excel.Application
objExcelFile.DisplayAlerts = False
Set objWorkBook = objExcelFile.Workbooks.Open(strFileName) For j = 1 To objWorkBook.Sheets.Count '从第一个Sheet开始读,这里读取Excel中所有的Sheet
Set objImportSheet = objWorkBook.Sheets(j)
'3 获取Excel有效区域的行和列数
intLastColNum = objImportSheet.UsedRange.Columns.Count
intLastRowNum = objImportSheet.UsedRange.Rows.Count
If MSHFlexGrid1.Cols < intLastColNum Then MSHFlexGrid1.Cols = intLastColNum '确保列数不会出错
'4 逐行读取Excel中数据 For CountI = 2 To intLastRowNum
If Trim$(objImportSheet.Cells(intCountI, 1).Value) <> "" Then
With MSHFlexGrid1
.Rows = .Rows + 1
For Inti = 1 To intLastColNum
''每次总是以表格的实际行数来填充,可以防止不必要的错误,即.rows-2
.TextMatrix(.Rows - 2, Inti - 1) = Trim$(objImportSheet.Cells(CountI, Inti).Value) Next Inti
End With
End If
Next
Next
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset Set cn = New ADODB.Connection
cn.CursorLocation = adUseClient
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\f1.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'" Set rs = New ADODB.Recordset
rs.Open "select 客户名称 from [sheet1$] group by 客户名称", cn, 2, 2
While Not rs.EOF
Combo1.AddItem rs.Fields(0)
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub