実現したいこと
If文の中の同じ処理を簡潔に書きたい
発生している問題・分からないこと
If文の中に同じコードがあるのでcall文で呼び出してコードを綺麗にしたいのですが上手く出来ません。
引数を使うことはわかってるのですが、上手く呼び出せない。
該当のソースコード
Set Rc1 = CurrentDb.OpenRecordset("T_会場") Set Rc2 = CurrentDb.OpenRecordset("SELECT * FROM WK_会場マスター ORDER BY 会場コード") Set Rc3 = CurrentDb.OpenRecordset("T_会場エラーリスト") If Rc2.RecordCount > 0 Then Do Until Rc2.EOF = True Err_flg = False If Len(Trim(Rc2![受験地区])) > 5 Then Rc3.AddNew Rc3![試験実施日] = Rc2![試験実施日] Rc3![会場コード] = Rc2![会場コード] Rc3![項目名] = "受験地区" Rc3![項目内容] = Rc2![受験地区] Rc3![文字数] = Len(Rc2![受験地区]) Rc3.Update Err_flg = True End If If Len(Trim(Rc2![会場名])) > 30 Then Rc3.AddNew Rc3![試験実施日] = Rc2![試験実施日] Rc3![会場コード] = Rc2![会場コード] Rc3![項目名] = "会場名" Rc3![項目内容] = Rc2![会場名] Rc3![文字数] = Len(Rc2![会場名]) Rc3.Update Err_flg = True End If If Len(Trim(Rc2![会場名略])) > 20 Then Rc3.AddNew Rc3![試験実施日] = Rc2![試験実施日] Rc3![会場コード] = Rc2![会場コード] Rc3![項目名] = "会場名略" Rc3![項目内容] = Rc2![会場名略] Rc3![文字数] = Len(Rc2![会場名略]) Rc3.Update Err_flg = True End If If Len(Trim(Rc2![所在地])) > 30 Then Rc3.AddNew Rc3![試験実施日] = Rc2![試験実施日] Rc3![会場コード] = Rc2![会場コード] Rc3![項目名] = "所在地" Rc3![項目内容] = Rc2![所在地] Rc3![文字数] = Len(Rc2![所在地]) Rc3.Update Err_flg = True End If If Len(Trim(Rc2![交通手段1])) > 30 Then Rc3.AddNew Rc3![試験実施日] = Rc2![試験実施日] Rc3![会場コード] = Rc2![会場コード] Rc3![項目名] = "交通手段1" Rc3![項目内容] = Rc2![交通手段1] Rc3![文字数] = Len(Rc2![交通手段1]) Rc3.Update Err_flg = True End If If Len(Trim(Rc2![交通手段2])) > 30 Then Rc3.AddNew Rc3![試験実施日] = Rc2![試験実施日] Rc3![会場コード] = Rc2![会場コード] Rc3![項目名] = "交通手段2" Rc3![項目内容] = Rc2![交通手段2] Rc3![文字数] = Len(Rc2![交通手段2]) Rc3.Update Err_flg = True End If If Len(Trim(Rc2![交通手段3])) > 30 Then Rc3.AddNew Rc3![試験実施日] = Rc2![試験実施日] Rc3![会場コード] = Rc2![会場コード] Rc3![項目名] = "交通手段3" Rc3![項目内容] = Rc2![交通手段3] Rc3![文字数] = Len(Rc2![交通手段3]) Rc3.Update Err_flg = True End If ' If Err_flg = False Then RC1.AddNew RC1![会場コード] = Rc2![会場コード] RC1![受験地] = Rc2![受験地区] 'RC1![場] = "不使用項目" RC1![会場名] = StrConv(Rc2![会場名], vbWide) RC1![会場名略] = StrConv(Rc2![会場名略], vbWide) RC1![所在地] = StrConv(Rc2![所在地], vbWide) RC1![交通手段1] = StrConv(Rc2![交通手段1], vbWide) RC1![交通手段2] = StrConv(Rc2![交通手段2], vbWide) RC1![交通手段3] = StrConv(Rc2![交通手段3], vbWide) RC1.Update ' End If Rc2.MoveNext Loop End If End Function
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
Functionプロシージャに渡す値を変えて、繰り返す処理にしたいが引数が上手く渡せなかった。
補足
Function 会場データインポート(WK_会場)
Dim XLAPP As Object Dim varFLName As Variant Dim FLName As String Dim Rc1 As Recordset Dim Rc2 As Recordset Dim Rc3 As Recordset Dim SQL As String Dim MsgTitle As String Dim FilePath As String Dim WK_ROW As Integer Dim ST_ROW As Integer Dim WK_COL As Integer Dim WK_COL2 As Integer Dim Str_SQL As String Dim Err_flg As Boolean Dim 会場データ As String
'エラーリスト作成
'WK_会場マスター→T_会場へ
Set Rc1 = CurrentDb.OpenRecordset("T_会場")
Set Rc2 = CurrentDb.OpenRecordset("SELECT * FROM WK_会場マスター ORDER BY 会場コード")
Set Rc3 = CurrentDb.OpenRecordset("T_会場エラーリスト")
If Rc2.RecordCount > 0 Then Do Until Rc2.EOF = True Err_flg = False If Len(Trim(Rc2![受験地区])) > 5 Then 会場データ = "Rc2[受験地区]" Call エラーデータインポート(会場データ) End If If Len(Trim(Rc2![会場名])) > 30 Then 会場データ = "Rc2[会場名]" Call エラーデータインポート(会場データ) End If If Len(Trim(Rc2![会場名略])) > 20 Then 会場データ = "Rc2[会場名略]" Call エラーデータインポート(会場データ) End If If Len(Trim(Rc2![所在地])) > 30 Then 会場データ = "Rc2[所在地]" Call エラーデータインポート(会場データ) End If If Len(Trim(Rc2![交通手段1])) > 30 Then 会場データ = "Rc2[交通手段1]" Call エラーデータインポート(会場データ) End If If Len(Trim(Rc2![交通手段2])) > 30 Then 会場データ = "Rc2[交通手段2]" Call エラーデータインポート(会場データ) End If If Len(Trim(Rc2![交通手段3])) > 30 Then 会場データ = "Rc2[交通手段3]" Call エラーデータインポート(会場データ) End If
' If Err_flg = False Then
Rc1.AddNew Rc1![会場コード] = Rc2![会場コード] Rc1![受験地] = Rc2![受験地区] 'RC1![場] = "不使用項目" Rc1![会場名] = StrConv(Rc2![会場名], vbWide) Rc1![会場名略] = StrConv(Rc2![会場名略], vbWide) Rc1![所在地] = StrConv(Rc2![所在地], vbWide) Rc1![交通手段1] = StrConv(Rc2![交通手段1], vbWide) Rc1![交通手段2] = StrConv(Rc2![交通手段2], vbWide) Rc1![交通手段3] = StrConv(Rc2![交通手段3], vbWide) Rc1.Update
' End If
Rc2.MoveNext Loop End If
Exit_会場データインポート:
'Set DB = Nothing Set Rc1 = Nothing Set Rc2 = Nothing Set Rc3 = Nothing Set XLAPP = Nothing Set XLWRKBK = Nothing Set XLWRKSH = Nothing Exit Function
Err_会場データインポート:
'エクセルのフリーズ防止 If XLAPP Is Nothing Then Else XLAPP.Quit Set XLAPP = Nothing End If MsgBox "システムエラー 担当者に連絡して下さい。" & vbCrLf & Err.Description, vbOKOnly + vbCritical, MsgTitle Resume Exit_会場データインポート
End Function
'Callで呼び出し
Public Function エラーデータインポート(Optional 会場データ As String)
Dim Err_flg As Boolean If Err_flg = False Then: Exit Function
Set Rc2 = CurrentDb.OpenRecordset("SELECT * FROM WK_会場マスター ORDER BY 会場コード")
Set Rc3 = CurrentDb.OpenRecordset("T_会場エラーリスト")
Rc3.AddNew Rc3![試験実施日] = Rc2![試験実施日] Rc3![会場コード] = Rc2![会場コード] Rc3![項目名] = "会場データ" Rc3![項目内容] = Rc2!["会場データ"] Rc3![文字数] = Len(Rc2!["会場データ"]) Rc3.Update Err_flg = True
End Function
Public Function Err_flg() As Boolean
Set Rc3 = CurrentDb.OpenRecordset("T_会場エラーリスト") If Rc3.RecordCount > 0 Then Err_flg = True Else Err_flg = False End If
End Function
回答3件
あなたの回答
tips
プレビュー