很早以前就写了一个以ACCESS为后台数据库、以EXCEL的VBA查询程序为前台的查询工资演变的程序。今天放在博客里做个备份,以供查询。
http://s8/mw690/49c182c2h7b9d7d838bc7&690
Option Explicit
Dim mydb As DAO.Database
Dim mytbl As DAO.TableDef
Dim rs As DAO.Recordset
Sub create()
Dim mydata$,
mytable$
mydata =
ThisWorkbook.Path & "\wagechange.mdb"
If
Dir(mydata) <> "" Then Kill
mydata
Set mydb =
CreateDatabase(mydata, dbLangChineseSimplified)
mytable =
"工资变动数据库"
Set mytbl =
mydb.CreateTableDef(mytable)
With
mytbl
.Fields.Append .CreateField("姓名", dbText, 10)
.Fields.Append .CreateField("拼音代码", dbText, 10)
.Fields.Append .CreateField("变动原因", dbText, 20)
.Fields.Append .CreateField("统计序号", dbInteger)
.Fields.Append .CreateField("岗位工资", dbInteger)
.Fields.Append .CreateField("薪级", dbInteger)
.Fields.Append .CreateField("薪级工资", dbInteger)
.Fields.Append .CreateField("见习工资", dbInteger)
.Fields.Append .CreateField("职务津贴", dbInteger)
.Fields.Append .CreateField("物价补贴", dbDouble)
.Fields.Append .CreateField("其他津补贴", dbDouble)
.Fields.Append .CreateField("执行时间", dbText, 6)
End
With
mydb.TableDefs.Append mytbl
mydb.Close
Set mydb =
Nothing
Set mytbl =
Nothing
MsgBox
"操作完成"
End Sub
Function pinyin(hanzi As Range) As String
Dim i%
Dim
tmp$
For i = 1 To
Len(hanzi)
If Asc(Mid(hanzi, i, 1)) <= 126 And Asc(Mid(hanzi,
i, 1)) >= 33 Then '
126为"~" 33为"!"
tmp = Mid(hanzi, i, 1)
Else
tmp = Application.WorksheetFunction.VLookup(Mid(hanzi, i, 1),
[{"吖","A";"八","B";"嚓","C";"咑","D";"鵽","E";"发","F";"猤","G";"铪","H";"夻","J";"咔","K";"垃","L";"嘸","M";"旀","N";"噢","O";"妑","P";"七","Q";"囕","R";"仨","S";"他","T";"屲","W";"夕","X";"丫","Y";"帀","Z"}],
2)
End If
pinyin = pinyin + tmp
Next i
End Function
Option Explicit
Dim mydb As DAO.Database
Dim mytbl As DAO.TableDef
Dim rs As DAO.Recordset
Private Sub CommandButton1_Click()
TextBox1.SetFocus
TextBox1.SelStart = 0
TextBox1.SelLength = Len(TextBox1)
End Sub
Private Sub CommandButton2_Click()
UserForm2.Show
End Sub
Private Sub CommandButton3_Click()
Unload
Me
ThisWorkbook.Close savechanges:=False
End Sub
Private Sub CommandButton4_Click()
If
CommandButton4.Caption = "高级" Then
If InputBox("请输入密码", "aa", "a") = "12dd540" Then
Me.Height = 420
CommandButton4.Caption = "常规"
End If
Else
CommandButton4.Caption = "高级"
Me.Height = 340
End If
End Sub
Private Sub CommandButton5_Click()
Dim i%
Dim filename
As Variant
Dim mybook
As Workbook
Dim mysheet
As Worksheet
filename =
Application.GetOpenFilename(("Excel文件 (*.xls), *.xls"), ,
"请选择要导入的文件")
If filename
= False Then Exit Sub
Set mybook =
Workbooks.Open(filename, , True)
Set mysheet
= mybook.Worksheets("事改2")
Set rs =
mydb.OpenRecordset("工资变动数据库", dbOpenDynaset)
With
rs
For i = 7 To 1249
.AddNew
.Fields("姓名") = mysheet.Cells(i, 2)
.Fields("拼音代码") = pinyin(mysheet.Cells(i, 2))
.Fields("变动原因") = "2006年7月工资改革"
.Fields("统计序号") = mysheet.Cells(i, 41)
.Fields("岗位工资") = IIf(mysheet.Cells(i, 28) = "", 0,
mysheet.Cells(i, 28))
.Fields("薪级") = IIf(mysheet.Cells(i, 29) = "", 0, mysheet.Cells(i,
29))
.Fields("薪级工资") = IIf(mysheet.Cells(i, 30) = "", 0,
mysheet.Cells(i, 30))
.Fields("见习工资") = IIf(mysheet.Cells(i, 31) = "", 0,
mysheet.Cells(i, 31))
.Fields("职务津贴") =
ThisWorkbook.Sheets("职务津贴").Cells(mysheet.Cells(i, 41), 1)
.Fields("物价补贴") = IIf(mysheet.Cells(i, 3) = "男", 49.5,
IIf(mysheet.Cells(i, 41) <= 26, 57.5, 55.5))
.Fields("其他津补贴") = 0
.Fields("执行时间") = "200607"
.Update
Next i
End
With
mybook.Close
savechanges:=False
MsgBox
"成功导入"
End Sub
Private Sub CommandButton6_Click()
Dim i%,
j%
Dim yuanyin
As Variant
Dim filename
As Variant
Dim mybook
As Workbook
Dim mysheet
As Worksheet
filename =
Application.GetOpenFilename(("Excel文件 (*.xls), *.xls"), ,
"请选择要导入的文件", , True)
If Not
IsArray(filename) Then Exit Sub
For j = 1 To
UBound(filename)
Set mybook = Workbooks.Open(filename(j), , True)
Set mysheet = mybook.Worksheets("事变2")
yuanyin = mybook.Worksheets("事变").Range("G2")
Set rs = mydb.OpenRecordset("工资变动数据库", dbOpenDynaset)
With rs
For i = 7 To mysheet.Range("B65536").End(xlUp).Row
.AddNew
.Fields("姓名") = mysheet.Cells(i, 2)
.Fields("拼音代码") = pinyin(mysheet.Cells(i, 2))
.Fields("变动原因") = yuanyin
.Fields("统计序号") = mysheet.Cells(i, 33)
.Fields("岗位工资") = IIf(mysheet.Cells(i, 24) = "", 0,
mysheet.Cells(i, 24))
.Fields("薪级") = IIf(mysheet.Cells(i, 25) = "", 0, mysheet.Cells(i,
25))
.Fields("薪级工资") = IIf(mysheet.Cells(i, 26) = "", 0,
mysheet.Cells(i, 26))
.Fields("见习工资") = IIf(mysheet.Cells(i, 27) = "", 0,
mysheet.Cells(i, 27))
If CInt(Left(mysheet.Cells(i, 30), 4)) < 2011
Then
.Fields("职务津贴") =
ThisWorkbook.Sheets("职务津贴").Cells(mysheet.Cells(i, 33), 1)