プロが教えるわが家の防犯対策術!

ユーザーフォームを設定した後で、次のプログラムを起動するとユーザーフォームを開こうとしても「パスが無効です」とでて使えなくなります。


Public Sub test()
UserForm3.Show
ActiveWorkbook.SaveCopyAs ThisWorkbook.Path & "\バックアップ\" & ActiveWorkbook.Name
UserForm2.Show
Unload UserForm3
Unload UserForm2
End Sub

また、プログラム中にシステムエラーとでたり、「オブジェクトが見つかりません」とでたりします。

いったいなぜなのか。どうすれば回避できるのか教えてください。お願いします

ちなみにプログラムを実行するときはエクセルファイルと同じ階層に「バックアップ」というフォルダを作ってください。

このプログラムを実行した後は保存しないことをお勧めします。
ユーザーフォームが起動できなくなっても責任はとれません。

エクセルは2000 です。

A 回答 (3件)

>私一人だけ対処できても意味がないんですよね・・・


2000SR1が標準の環境という事ですか。
#不具合あるバージョンにサービスパックもあてられない状況で
#ExcelVBAで何かを提供しろと言われたら私だったら躊躇しますけど
#まあ、如何ともし難い状況なのでしょうね。

>コードによる対処をさせたかったんですけれど、どうも無理っぽいですね。
コード全部が提示されたわけじゃないので『無理』と決め付けるのはどうかと。
Appliction.Ontimeを使ってみるという手もあるかもしれません。
SaveCopyAsに問題があるならSaveAsで代替コードを組んでもいいかもしれません。
[CreateBackup プロパティ]を活用した運用に切り替えてもいいかもしれません。

ただ、ThisWorkbookがマクロBookであるという位置づけであれば
本来、バックアップを取る必要があるのかどうか、という意味では
ThisWorkbook以外のActiveなデータブックにだけバックアップ処理するというのは
至極真っ当な『コードによる対処』だと思われますが。
    • good
    • 0
この回答へのお礼

SR-1が標準かどうか確かめるのも大変な環境です。
自分は会社の末端の人間で、確認してくれなんて言えないですし、人によってはエクセル2003の人もいました。

コード全部提示は無理です。かなり長いマクロなんで。
ただ、私の環境では、エクセルファイルの新規作成からokボタンのみのユーザーフォームを三つ作り、質問文本文のコードを入れた所、再現はしましたので、最低限の記述になっていると思います。

ついでに言うと、OKを押したときの処理にme.hideにしたりunload meにするかで微妙にエラーメッセージが違いました。
(システムエラーとでたり、「オブジェクトが見つかりません」とでたり、ときたま、エクセルが強制終了したり)
しかし、この辺のメッセージと処理内容の違いによる相互関係が毎回変わっていたので質問本文には書きませんでしたが・・・
全てのパターンで言えることは、
プログラムを起動した後、ユーザーフォームを開こうとしても「パスが無効です」とでることですね。

恐らく、ユーザーフォームのパスとやらが、バックアップ先のファイルに移行してしまったんではないかと思います。
(ただの推測ですが・・)


なるほど。手はたくさんありそうですね。
色々試してみます。

色々な手法を教えてくだてくださってありがとうございます。

>>ただ、ThisWorkbookがマクロBookであるという位置づけであれば・・・

完全なマクロブックという位置づけにするか、正直どうしようか迷っていました。
今回の件で、マクロブックにしようかなっとという考えを持つようになりました。
良いきっかけだったのかもしれません。

お礼日時:2011/07/18 20:00

winXP/xl2000sp3,winXP/xl2003sp3


では再現しないですね。
でも取り敢えず簡易なテストなのでFormモジュールの内容によるのかもしれませんが。

>エクセルは2000 です。
ひょっとしてSR-1ですか?
昔、『[XL2000]UserFormオブジェクトでSaveCopyAs後にSaveを使用するとエラー』
http://support.microsoft.com/kb/264712/ja
こういうのがありましたから必要であれば
http://office.microsoft.com/ja-jp/downloads/CD00 …
ここから更新してみてください。

#2000は枯れて安定してるイメージがあって個人的には好きなバージョンなんですが
#残念ながらサポートぎれなのがどうにも..ですね。
    • good
    • 0
この回答へのお礼

返答ありがとうございます
返事遅れてしまい申し訳ありません

エクセルのヴァージョンは 9.0.3812 SR-1

でした。
私一人だけ対処できても意味がないんですよね・・・
複数人数の人に使わせるので・・・
なので、コードによる対処をさせたかったんですけれど、どうも無理っぽいですね。

幸い、本来の使い方では、ActiveWorkbookとThisWorkbookが同じになることはないと思いますので、
ActiveWorkbookとThisWorkbookが同じときは、そのまま処理を終了させるか、バックアップを取らずに進ませるかさせます。

お礼日時:2011/07/18 18:25

ActiveWorkbookやThisWorkbookはファイルとして存在しているのでしょうか?


SaveCopyAs は一度も保存されていないBookでは動かないようです。
また、一度も保存されていないBookにはPathがありません。
ブレークポイントを設けてPathやNameに希望する値が入っているかを確認してみてください。

この回答への補足

保存しているファイルに行っております。
一つ言い忘れていました。
この現象は
ActiveWorkbookとThisWorkbookが一致するとき
(つまり、マクロが描かれているファイル上で実行)

のみ、発生します。
別のファイルで実行したときは正常に動きました

補足日時:2011/07/13 10:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!