一个简单的MDB之Table输出到Word的vb小程序,包括简单的查询、排序和分组功能。 欢迎批评交流[email protected] 
Option Explicit Dim DataType(100) As Integer Dim SqlString As String Dim OrderStr As String Dim TalNaStr As String Dim i As Integer Dim MacroName As String Private WordApp As Word.Application Private doc As Word.Document Private se1 As Word.Selection Private db As Database Private rs As Recordset 
 Private Sub CmdQuery_Click() 'On Error Resume Next TalNaStr = Data1.Caption 'queryprintfrm.Data1.DatabaseName = datalistfrm.Text1.Text 'queryprintfrm.Data1.RecordSource = datalistfrm.Combo1.Text 'queryprintfrm.Data1.DatabaseName = datalistfrm.Text1.Text queryprintfrm.Data1.RecordSource = datalistfrm.Combo1.Text 
 queryprintfrm.Data1.Refresh 
If Me.Exp1.Text = "Like" Then OrderStr = FindField.Text queryprintfrm.Data1.RecordSource = "select * from" + " " + TalNaStr + " " + "where" + " " + Me.FindField.Text + " " + "like" + " " + "'" + Me.Range1.Text + "'" + " " + "order by " + " " + OrderStr Me.Data1.Refresh Me.DBGrid1.Refresh Me.Refresh End If 
If Me.Exp1.Text = "In" Then OrderStr = FindField.Text queryprintfrm.Data1.RecordSource = "select * from" + " " + TalNaStr + " " + "where" + " " + Me.FindField.Text + " " + "In" + " " + "(" + "'" + Me.Range1.Text + "'" + ")" + " " + "order by " + " " + OrderStr Me.Data1.Refresh Me.DBGrid1.Refresh Me.Refresh End If On Error Resume Next Select Case Data1.Recordset.Fields(ComFind.ListIndex).Type Case 1, 4, 5 SqlString = "select*from" + TalNaStr + " where " + FindField.Text + " " + Exp1.Text + " " + Range1.Text Case 10 SqlString = "select*from " + TalNaStr + " where " + FindField.Text + "" + Exp1.Text + "" + "'" + Range1.Text + "'" Case 8 SqlString = "select*from " + TalNaStr + " where " + FindField.Text + Exp1.Text + "CDate(" + "'" + Range1.Text + "')" 
End Select OrderStr = FindField.Text QueryData SqlString, OrderStr 
End Sub 
  
Private Sub Combo1_Click() On Error Resume Next TalNaStr = Data1.Caption Data1.RecordSource = "select" + " " + Combo1.Text + " " + "from" + " " + TalNaStr + " " + "group by " + " " + Combo1.Text 'Data1.RecordSource = "select *from  order by name" Data1.Refresh DBGrid1.Refresh Data1.Recordset.MoveLast Me.Label8.Caption = Me.Data1.Recordset.RecordCount Me.Refresh End Sub 
Private Sub ComFind_Click() FindField.Text = ComFind.Text Range1.Text = "" ComSort.Text = ComFind.Text Me.Refresh End Sub 
Private Sub Command1_Click() On Error Resume Next          For i = 0 To List1.ListCount - 1 Step 1          If List1.Selected(i) Then             List2.AddItem List1.Text             List1.RemoveItem (List1.ListIndex)             Exit Sub             End If             Next                          List1.SetFocus             List1.Text = List1.List(0)                          If List1.List(0) = "" Then             List2.SetFocus             List2.Text = List2.List(0)             End If End Sub 
Private Sub Command10_Click() Dim sfile As String      With dlgCommonDialog          .DialogTitle = "打开数据库文件"         .CancelError = False         'ToDo: 设置 common dialog 控件的标志和属性         .Filter = "所有数据库文件*.mdb|*.mdb|"         .ShowOpen         If Len(.FileName) = 0 Then             Exit Sub         End If         sfile = .FileName                 Data1.Caption = .FileTitle     End With '        Data1.Database = Label3.Caption 
        Data1.DatabaseName = sfile '        Data1.RecordSource = '         On Error Resume Next                            Data1.Refresh '        Form1.MSFlexGrid1.Refresh         Form1.DBGrid1.Refresh         Form1.Refresh End Sub 
Private Sub Command2_Click() 
'Set db = OpenDatabase(datalistfrm.Text1.Text) 'Set rs = db.OpenRecordset(datalistfrm.Combo1.Text) Set db = Data1.Database Set rs = Data1.Recordset Data1.Refresh 
Set WordApp = New Word.Application WordApp.Documents.Add Set doc = WordApp.ActiveDocument Set se1 = WordApp.Selection 
      With doc.PageSetup             .LineNumbering.Active = False             .Orientation = wdOrientLandscape             .TopMargin = CentimetersToPoints(2)             .BottomMargin = CentimetersToPoints(2)             .LeftMargin = CentimetersToPoints(2)             .RightMargin = CentimetersToPoints(2)             .Gutter = CentimetersToPoints(0)             .HeaderDistance = CentimetersToPoints(1.5)             .FooterDistance = CentimetersToPoints(1.75)             .PageWidth = CentimetersToPoints(29.7)             .PageHeight = CentimetersToPoints(21)             .FirstPageTray = wdPrinterDefaultBin             .OtherPagesTray = wdPrinterDefaultBin             .SectionStart = wdSectionNewPage             .OddAndEvenPagesHeaderFooter = False             .DifferentFirstPageHeaderFooter = False             .VerticalAlignment = wdAlignVerticalTop             .SuppressEndnotes = False             .MirrorMargins = False             .TwoPagesOnOne = False             .GutterPos = wdGutterPosLeft             .LayoutMode = wdLayoutModeLineGrid         End With      se1.TypeText Text:="20" & CStr(Date) & " " & CStr(Time()) If List2.ListCount = 0 Then     Call Command6_Click End If 
doc.Tables.Add Range:=se1.Range, numrows:=1, numcolumns:=List2.ListCount          For i = 0 To List2.ListCount - 1 Screen.MousePointer = 11 'se1.TypeText Text:=rs.Fields(i).Name se1.TypeText Text:=List2.List(i) se1.MoveRight unit:=12 Next 
'se1.TypeText Text:="产品名称" 'se1.MoveRight unit:=12 
Do Until rs.EOF  For i = 0 To List2.ListCount - 1  On Error Resume Next ' se1.TypeText Text:=rs.Fields(i).Value  se1.TypeText Text:=rs.Fields(List2.List(i)).Value  se1.MoveRight unit:=12  Next 'se1.TypeText Text:=rs!产品名称 'se1.MoveRight unit:=12 
'se1.TypeText Text:=rs!中止 'se1.MoveRight unit:=12 
rs.MoveNext     Loop WordApp.Run MacroName:="AutoFitContent"                         se1.InsertBreak      se1.Delete Count:=List2.ListCount               se1.Sections(1).Footers(1).PageNumbers.Add PageNumberAlignment:= _     wdAlignPageNumberRight, FirstPage:=True        WordApp.Visible = True     ' WordApp.Run MacroName:="InsertDateTime" Set WordApp = Nothing Screen.MousePointer = 1 
End Sub 
Private Sub Command3_Click() 'CrystalReport1. End Sub 
Private Sub Command4_Click() Unload queryprintfrm End Sub 
Private Sub Command5_Click() End End Sub 
 Private Sub Command6_Click() For i = 0 To List1.ListCount - 1 Step 1     List2.AddItem List1.List(i)     Next     List1.Clear     List2.SetFocus     List2.Text = List2.List(0) End Sub 
Private Sub Command7_Click() On Error Resume Next          For i = 0 To List2.ListCount - 1 Step 1          If List2.Selected(i) Then             List1.AddItem List2.Text             List2.RemoveItem (List2.ListIndex)             Exit Sub             End If             Next                          List2.SetFocus             List2.Text = List2.List(0)                          If List2.List(0) = "" Then             List1.SetFocus             List1.Text = List1.List(0)             End If 
End Sub 
Private Sub Command8_Click() For i = 0 To List2.ListCount - 1 Step 1     List1.AddItem List2.List(i)     Next     List2.Clear     List1.SetFocus     List1.Text = List1.List(0) End Sub 
Private Sub Command9_Click() On Error Resume Next 'On Error GoTo Errlist: 'Errlist: '     If MsgBox("没有选定字段或所选字段不合要求,请重新选择字段再浏览!", vbOKOnly) = vbOK Then Exit Sub     Dim ListStr As String If List2.ListCount <> 0 Then    For i = 0 To List2.ListCount - 1 Step 1        If (i <> List2.ListCount - 1) Then           ListStr = ListStr + List2.List(i) + ","           Else           ListStr = ListStr + List2.List(i)           End If         Next     End If     Me.Data1.RecordSource = "select" + " " + ListStr + " " + "from" + " " + Data1.Caption     Me.Data1.Refresh     Me.DBGrid1.Refresh     Me.Refresh 
End Sub 
Private Sub ComSort_Click() OrderStr = ComSort.Text QueryData SqlString, OrderStr End Sub 
  
Function QueryData(ByVal SqlString As String, ByVal OrderStr As String) As String On Error Resume Next SqlString = SqlString + "order by " + " " + OrderStr Data1.RecordSource = SqlString 'Data1.RecordSource = "select *from  order by name" Data1.Refresh DBGrid1.Refresh Me.Refresh End Function 
  
Private Sub Form_Load() On Error Resume Next 
queryprintfrm.Data1.DatabaseName = datalistfrm.Text1.Text queryprintfrm.Data1.RecordSource = datalistfrm.Combo1.Text queryprintfrm.Caption = datalistfrm.Combo1.Text queryprintfrm.Data1.Refresh 'Me.Data1.RecordSource = datalistfrm.Combo1.Text 'Me.Caption = datalistfrm.Combo1.Text 'Me.Data1.Refresh For i = 0 To Data1.Recordset.Fields.Count - 1 Step 1 queryprintfrm.ComFind.AddItem Data1.Recordset.Fields(i).Name queryprintfrm.ComSort.AddItem Data1.Recordset.Fields(i).Name Me.List1.AddItem Data1.Recordset.Fields(i).Name 'Me.List2.AddItem Data1.Recordset.Fields(i).Name Me.Combo1.AddItem Data1.Recordset.Fields(i).Name Next queryprintfrm.Refresh For i = 0 To Data1.Recordset.Fields.Count - 1 DataType(i) = Data1.Recordset(i).Type Next 
'error: 'MsgBox "数据库文件出错,请重新选择数据库!" 
 End Sub 
Private Sub List1_DblClick() Call Command1_Click 
End Sub 
  
 Private Sub List2_DblClick() Call Command7_Click End Sub 
Private Sub open_Click()    Call Command10_Click End Sub  
 
  |