|
おはようございます。
Access2002でプログラムを作成しております。
Excelで作成されたデータをアクセスで取込み、そのデータを保存用テーブルに移し変えるプログラムを作成しています。
保存用テーブルに既に同じ情報がある場合はデータの更新を、同じ情報が無い場合は新規に追加をするようにしているつもりです。
作成してみて、一応思い通りに動くのですが、作り方がヘタなのでプログラムが長々となってしまっています・・・
同じようなパターンのプログラムを後いくつか作るつもりなのですが、もう少し効率の良いプログラムの書き方があったらアドバイスをお願いします。
以下作成したプログラム
Private Sub 給与勤怠取込_Click()
Dim myDB1 As DAO.Database
Dim myRS1 As DAO.Recordset
Dim mySQL1 As String
Dim myDB2 As DAO.Database
Dim myRS2 As DAO.Recordset
Dim mySQL2 As String
Dim R_Flg As Integer
DoCmd.TransferSpreadsheet acImport, , _
"テーブル1", "c:\勤怠.xls", True
R_Flg = 0
Set myDB1 = CurrentDb
Set myRS1 = myDB1.OpenRecordset("テーブル1", dbOpenDynaset)
Set myDB2 = CurrentDb
Set myRS2 = myDB1.OpenRecordset("既存蓄積テーブル", dbOpenDynaset)
Do Until myRS1.EOF
myRS2.MoveFirst
Do Until myRS2.EOF
If myRS2!社員コード = myRS1!社員_コード Then
If myRS2!支給年月 = myRS1!支給年月 Then
myRS2.Edit
If IsNull(myRS1!弁当代) Or myRS1!弁当代 = "" Then
myRS2!控除4 = 0
Else
myRS2!控除4 = myRS1!弁当代
End If
If IsNull(myRS1!特別手当) Or myRS1!特別手当 = "" Then
myRS2!手当4 = 0
Else
myRS2!手当4 = myRS1!特別手当
End If
If IsNull(myRS1!その他_支給額) Or myRS1!その他_支給額 = "" Then
myRS2!手当9 = 0
Else
myRS2!手当9 = myRS1!その他_支給額
End If
If IsNull(myRS1!その他_控除額) Or myRS1!その他_控除額 = "" Then
myRS2!控除5 = 0
Else
myRS2!控除5 = myRS1!その他_控除額
End If
If IsNull(myRS1!出勤_日数) Or myRS1!出勤_日数 = "" Then
myRS2!出勤日数 = 0
Else
myRS2!出勤日数 = myRS1!出勤_日数
End If
If IsNull(myRS1!所定労働_時間) Or myRS1!所定労働_時間 = "" Then
myRS2!所定内労働通常時間 = 0
Else
myRS2!所定内労働通常時間 = myRS1!所定労働_時間
End If
If IsNull(myRS1!普通_残業) Or myRS1!普通_残業 = "" Then
myRS2!普通残業時間数 = 0
Else
myRS2!普通残業時間数 = myRS1!普通_残業
End If
If IsNull(myRS1!深夜_残業) Or myRS1!深夜_残業 = "" Then
myRS2!深夜残業時間数 = 0
Else
myRS2!深夜残業時間数 = myRS1!深夜_残業
End If
If IsNull(myRS1!総労働_時間) Or myRS1!総労働_時間 = "" Then
myRS2!総労働時間数 = 0
Else
myRS2!総労働時間数 = myRS1!総労働_時間
End If
If IsNull(myRS1!有給_日数) Or myRS1!有給_日数 = "" Then
myRS2!有給 = 0
Else
myRS2!有給 = myRS1!有給_日数
End If
If IsNull(myRS1!欠_勤) Or myRS1!欠_勤 = "" Then
myRS2!欠勤日数 = 0
Else
myRS2!欠勤日数 = myRS1!欠_勤
End If
R_Flg = 1
myRS2.Update
End If
End If
If R_Flg = 1 Then
Exit Do
End If
myRS2.MoveNext
Loop
If R_Flg = 0 Then
myRS2.AddNew
myRS2!役職コード = myRS1!役職コード
myRS2!所属コード = myRS1!所属コード
myRS2!社員コード = myRS1!社員_コード
myRS2!支給年月 = myRS1!支給年月
myRS2!氏名 = myRS1!氏名
If IsNull(myRS1!弁当代) Or myRS1!弁当代 = "" Then
myRS2!控除4 = 0
Else
myRS2!控除4 = myRS1!弁当代
End If
If IsNull(myRS1!特別手当) Or myRS1!特別手当 = "" Then
myRS2!手当4 = 0
Else
myRS2!手当4 = myRS1!特別手当
End If
If IsNull(myRS1!その他_支給額) Or myRS1!その他_支給額 = "" Then
myRS2!手当9 = 0
Else
myRS2!手当9 = myRS1!その他_支給額
End If
If IsNull(myRS1!その他_控除額) Or myRS1!その他_控除額 = "" Then
myRS2!控除5 = 0
Else
myRS2!控除5 = myRS1!その他_控除額
End If
If IsNull(myRS1!出勤_日数) Or myRS1!出勤_日数 = "" Then
myRS2!出勤日数 = 0
Else
myRS2!出勤日数 = myRS1!出勤_日数
End If
If IsNull(myRS1!所定労働_時間) Or myRS1!所定労働_時間 = "" Then
myRS2!所定内労働通常時間 = 0
Else
myRS2!所定内労働通常時間 = myRS1!所定労働_時間
End If
If IsNull(myRS1!普通_残業) Or myRS1!普通_残業 = "" Then
myRS2!普通残業時間数 = 0
Else
myRS2!普通残業時間数 = myRS1!普通_残業
End If
If IsNull(myRS1!深夜_残業) Or myRS1!深夜_残業 = "" Then
myRS2!深夜残業時間数 = 0
Else
myRS2!深夜残業時間数 = myRS1!深夜_残業
End If
If IsNull(myRS1!総労働_時間) Or myRS1!総労働_時間 = "" Then
myRS2!総労働時間数 = 0
Else
myRS2!総労働時間数 = myRS1!総労働_時間
End If
If IsNull(myRS1!有給_日数) Or myRS1!有給_日数 = "" Then
myRS2!有給 = 0
Else
myRS2!有給 = myRS1!有給_日数
End If
If IsNull(myRS1!欠_勤) Or myRS1!欠_勤 = "" Then
myRS2!欠勤日数 = 0
Else
myRS2!欠勤日数 = myRS1!欠_勤
End If
myRS2.Update
End If
R_Flg = 0
myRS1.MoveNext
Loop
Set myRS1 = Nothing
Set myDB1 = Nothing
Set myRS2 = Nothing
Set myDB2 = Nothing
CurrentDb.Execute "DELETE * FROM テーブル1;"
MsgBox "取込処理終了"
End Sub
|
|