投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/12/30 11:44:04
>>> 描画オブジェクトの割り当てや復元は、ループの前と後で処理するだけで良いと思います。

続き。このあたりも同様におかしいですね。

> hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0))
> hBr = CreateSolidBrush(RGB(255, 0, 0))

現在の処理
For pre = 1 To 3
  Set db = OpenDatabase(…)
  Set rs = db.OpenRecordset(…)
    新しいペンとブラシを作成
    Do Until rs.EOF
        新しいペンとブラシを割り当て
        描画処理
        以前のペンとブラシに復元
        rs.MoveNext
    Loop
Next
rsとdbを処分
ペンとブラシを処分


修正案
新しいペンとブラシを作成
新しいペンとブラシを割り当て
For pre = 1 To 3
  Set db = OpenDatabase(…)
  Set rs = db.OpenRecordset(…)
    Do Until rs.EOF
        描画処理
        rs.MoveNext
    Loop
  rs.Close
  db.Close
Next
rsとdbを処分
以前のペンとブラシに復元
ペンとブラシを処分



> まだ修正がおかしいでしょうか?
あとは「インデント(字下げ)」が統一されていない点が気にかかりました。


> MyStrFile = "街区データを置いたフォルダ\"& \tmp00d.bmp" 
ここの文法エラーは横に置いておくとして…。


> Dim a As String
> a = Now()
> MsgBox a & "-" & Now()
本筋ではありませんが、できればここも見直した方が望ましいです。

変数宣言を Dim a As Date ではなく As String とするのであれば、
FormatDateTime 関数や Format$ 関数等を使って、明示的に文字列変換するべきでしょう。
あるいは Date$ や Time$ のように、最初から文字列型で返すコードを使うとか。

VBA には Option Strict が無いので、データ型の違いに気づくには慣れが必要かも。