|
▼小僧 さん:
▼YU-TANG さん:
ご回答、ありがとうございます。
結果としては、
AleadyOpenedの自作関数を使用する事で、
解決致しました。
YU-TANG さん、ありがとうございました。
又、小僧 さん、
色々なアドバイスをありがとうございます。
もしお分かりでしたら、教えて頂けないでしょうか?
説明の仕方が悪いかもしれませんが、ご了承下さい。
>指定の Excel ファイルを Open した後に
>Workbook の ReadOnly プロパティの値を調べる事で
>2重に開かれたかどうかを判断できると思います。
ロジックを見て頂くと分かりやすいかもしれません。
下記のようなロジックを追加してみました。
一つは、上書きを指定したファイルを検索して、
そのファイルは閉じるようにしてみました。
しかし「上書きしますか?」と上書きを指定したファイルだけは、
何故か検索されませんでした。
他に開いているファイルは、検索できましたが・・・。
For Each Myfile In Exl.Workbooks
If Myfile.Name = 「ファイル名」 Then
Myfile.Close savechanges:=False
End If
Next Myfile
もう一つは、下記です。
よく分かりませんが、上手くいきませんでした。
(使用中となりませんでした)
Exl.Workbooks.Open FileName:=「パス名+ファイル名」
Exl.Workbooks(「ファイル名」).Activate
If Exl.ActiveWorkbook.ReadOnly Then
MsgBox "使用中"
Exl.ActiveWorkbook.Close
Set Exl = Nothing
Exit Function
End If
>>更には、次にエクセルを起動しようとすれば、起動できなくなっています。
>>(タスクマネージャーからEXCELを終了させれば、起動出来ましたが・・・)
>こちらについては原因が 2 点考えられます。
>1) 上位オブジェクトからの参照ができていない。
>2) オブジェクトの解放がうまくいっていない。
この場合は、エラーとなってしまうので、2) でしょうか。
分かっていないのですが、
コモンダイヤログを使用しており、
ret = GetSaveFileName(OFN)
で、パス名+ファイル名を取得するようです。
ここでファイル保存先を指定する画面が開くのですが、
既存のファイルを指定すると、
「上書きしますか?」とメッセージが出ます。
「はい」にした時点で、
既存のファイル(既に開いているファイル)は、
どのような状態になるのでしょうか。
別でExcelが起動する気配はないのですが、
For Each に引っかからなかったので・・・。
(分かりにくい説明かもしれません。)
>CSV ファイルの出力であれば通常TransferText メソッドで行いますし、
>わざわざ Excel で開く必要もないと思われますが…。
申し訳ございません。
説明不足でした。
CSV は TransferText を使用しております。
|
|