おじゃまします
試される時にはテスト用の環境で行ってください。
標準モジュールに以下を転記し、実行します。
Public Sub Sample()
Dim db As DAO.Database
Dim ctn As DAO.Container
Dim doc As DAO.Document
Dim rpt As Report
Dim ctl As Control
Set db = CurrentDb
Set ctn = db.Containers("Reports")
For Each doc In ctn.Documents
DoCmd.OpenReport doc.Name, acViewDesign
Set rpt = Screen.ActiveReport
For Each ctl In rpt.Controls
If (ctl.ControlType = acTextBox) Then
If (ctl.ControlSource = "=Now()") Then
ctl.Format = "gggee年mm月dd日(aaa)"
Exit For
End If
End If
Next
DoCmd.Close acReport, doc.Name, acSaveYes
Set rpt = Nothing
Next
Set ctn = Nothing
Set db = Nothing
End Sub
やっていることは、存在するレポートの名前を得るために
CurrentDb.Containers("Reports").Documents
で管理されているレポート分処理を回します。
1つのレポートをデザインで開き、レポート内にあるテキストボックスを見ていきます。
コントロールソースが "=Now()" となっているものの書式を
"gggee年mm月dd日(aaa)" に設定します。
その後レポートを閉じます。( acSaveYes で保存することになります)
"gggee年mm月dd日(aaa)" の表示結果は、 平成23年06月02日(木) に
書式ではなく "=Now()" 自体を置き換えるのなら
"=Format(Now(),'gggee年mm月dd日(aaa)')"
と置き換えれば良さそうです。
コントロールソース内の記述の一部 "Now()" を・・・
なら、上記の応用で If 文のところは Like で、置き換えは Replace で・・・
レポートの基がクエリで、そこに記述している "Now()" ならば、
クエリの修正が必要になります。
単純に Now() AS XXXX のようにしているのなら、
前述した処理でコントロールソースが XXXX のものに対して行えば・・・・
でも単純なループ処理にはならないので、手修正が楽だと思います。
くれぐれも、試される時にはテスト用の環境で行ってください。
参考にする/しない等々含め、すべて自己責任でお願いします。
お礼
完璧です。感謝します。 またこのような質問にお付き合いください。 ありがとうございました。