|
初心者さん、bykinさんこんにちは。
私も初心者さんのような仕様の場合は、bykinさんのような方法で処理しています。
が、いちどもエラーが発生したことはありませんよ。
Dim bkA As Excel.Workbook 'A.xls
Dim strA As String 'A.xlsのFullname
Dim strC As String 'C.xls のFullname
'A.xlsを開く
Set bkA = Workbooks.Open(Filename:=strA, ReadOnly:=True)
'C.xlsの内容に書き換え処理
'作業中のA.xlsをC.xlsとしてに保存
bkA.SaveCopyAs (strC)
'Aを閉じる
bkA.Close savechanges:=False
Set bkA = Nothing
A.xlsを開いて、データ操作中に異常処理しても、
保存さえしなれば、書き換えられることは無いと思います。
(開いているのはオブジェクトのインスタンス、とお考えください。)
あくまで、予想なんですが、
ファイルの処理数が増えるとエクセルが強制終了される
のと
B.xlsあるいは、C.xlsがCloseできない、
というのは、同じ原因の可能性が高いと思います。
たとえば、"データ操作"中に、開いているブックのオブジェクトを取得しているのに、
きちんと、参照解放せぬままCLOSEしようとしていませんか?
#例えば、モジュールの内部変数、クラスの内部変数などに、
#ブックのシートを参照設定しておいて、その解放がきちんとされていない。
#実は.netから操作していて、RCWの参照カウントが残っているなど。
>ところで・・・まずはSaveAs,Save,Close自体が怪しいのか
>途中の処理が怪しいのかをはっきりさせたほうがええと思います。
>
>途中の処理を全部コメントアウトして、単に「別名保存→保存→閉じる」だけの
>コードにして実験する。
>それでもうまいこといかんかったらSaveAs・・・が怪しいんやけど、恐らく
>途中の処理が原因なんやないかな?
>
>で、コメントアウトしてる処理を少しずつ非コメント化して順番に実行することで
>どこに問題があるんかを見つけ出す・・・ってことになるんとちゃいまっか?
>(On Error Goto はコメントアウトしておく)
>
>原因がわからんときのデバッグ作業ってのは大変やけど、地道にやることが
>結局一番早道やと思います。
まったく、その通りだと思います。
このアドバイスを実行してみてください。
#時間もないし、あと一歩で完成!なので、
#イベント探しを探求されるお気持ちもたいへんよく分かります
予想は、あくまで、予想ですので、はずしていたら、すみません。
|
|