しかしまあ、びっくりするくらいよく落ちる。
Office2007(32bit版)accdbをOffice2016(64bit版)に移行しようとしているのだが、、、
一応、DeclareしたところはPtrSafeを付けて起動するようにはなったのだが、使ってみてビックリ!

元々この販売管理プログラムはOffice97 mdbで作成したものをOffice2007に移行する時、accdbに変換したものだ。今回、念願の64bit化。
まだ、あまり試していないのだが、あまりにもよく落ちるので、取り敢えず動作が変なところをメモ。

1. フォームを閉じる時、開く時に落ちる
データを登録してフォーム閉じるのだが、データは登録されているがフォームを閉じる際、落ちてしまう。また、落ちなくても即座に別フォームを開く時、いきなり落ちる。
別フォームを閉じないで最初のメニュー画面からそのフォームを開くと落ちない。
hiddenしているフォームを閉じて、同時に表示しているフォームを閉じる場合も落ちることがある。
どういった場合に落ちるのかよくわからない。
ただ、フォームを閉じて即時に別フォームを開こうとすると落ちるように思える。

2. Setfocusの動作変
別フォームからフォームを開いてコードでSetfocusできるのに、自フォームからSetfocusしようととするとエラーになる。
これがまたよくわからないのだが、フォームヘッダーでEnterしてもTABオーダーを無視して、詳細部にフォーカスが移動してしまったりする。
フォームヘッダーにある数個のテキストボックスを変更しないでEnterだけ入力すれば、TABオーダー通りにフォーカスされるのに、途中テキストボックスの内容を編集するとEnter入力後、詳細部にフォーカスが移動してしまう。このフォームは連結フォーム。

原因は全くわからない。おっそろしく不思議。
ちょっと試してみようと思うのは、Doeventsを入れたらどうなるか。
フォームを閉じる時、即座に続けて別フォームを開こうとすると落ちてしまうのは同期処理されていないのかと、思ってしまう。また、フォームを開いてSetfocusが通らないのも、フォームが開き終わる前にSetfocusしているのではないかと思えたりもする。
ネットで調べても、Accessで非同期処理というとクエリーが終了する前 に次の処理に入ってしまうといったことくらいで、フォームの開け閉めについての記事はないようなので本当に不思議だ。

(2017/1/25
Doeventsはあまり関係なさそう。むしろフォーム内のテキストボックスのコントロールソースに標準モジュールで定義した関数を使ってるとエラーになってしまう。得意先一覧の社名を省略名に変更する関数を使ってコントロールソースにしていると、何度かそのフォームを開け閉めしているとエラーになる。仕方ないので得意先マスターに予め省略した略名フィールドを追加した。)

(2017/1/30
やはりDoeventsを入れるのは有効だ。あるフォームから別フォームに移動して、テキストボックスでIMEを「オフ」に設定しているのに、「カナ」になってしまう。フォーム移動後、Doeventsを入れて、テキストボックスに移動、コードでIMEをオフにする。Doeventsを入れないとうまく動作しなかった。)

3.Word中の表の行をVBAから削除する場合。例えば4行不要な行を削除する場合、1回目の削除は成功するが、2回目削除すると全列幅が大きくなってしまう。
 
4.得意先一覧の社名などで標準モジュールで定義した関数を使用したコントロールソースを設定すると止まる場合がある。いつもではないところが不思議。(2017/1/25)

5.IME 入力モードの動作が変
「カナ」入力を指定していても、「英数」になったり、「オフ」になっていたりする。動作が不確実、はっきりした再現性がない。(2017/1/26)
コンボボックスにフォーカスが移動すると、IME入力モードが「オフ」に設定していても「ひらがな」になってしまう。
(2017/1/26)

6.テキストボックスの「境界線スタイル」の表示が変
「境界線スタイル」と「透明」にしていても「実線」表示される。
(2017/1/30)

7.一度フォーカスを失うと、その後、setfocusが通らない。
(2017/2/23)


64bit化への道は遠いなあ。

ーーーーーーーーーーーーーーーーーーーーーーーーーー
2017/1/24

あれから一週間、なんとなく落ち着いてきた。
もちろん「3」の場合は行削除しないようコードの修正もした。
また、tifをダブルクリックしてshellからois.exeで開いていたが、Windows10にはois.exeが含まれていないので、下記のようにした。

#If VBA7 Then
Shell "C:\Windows\System32\rundll32.exe " & """C:\Program Files\Windows Photo Viewer\PhotoViewer.dll"", ImageView_Fullscreen " & フルパスのファイル名, vbNormalFocus
#Else
Shell "OIS.EXE " & フルパスのファイル名, vbNormalFocus
#End If

もう直ぐ月末なので、月末請求書が一度に印刷できるか試してみる。