バックアップするとuserformが使えない

このQ&Aのポイント
  • ユーザーフォームを設定した後で、バックアップをするとユーザーフォームが使えなくなります。
  • プログラムを実行するとシステムエラーや「オブジェクトが見つかりません」というエラーメッセージが表示されることがあります。
  • プログラムを実行する前に、エクセルファイルと同じ階層に「バックアップ」というフォルダを作成してください。また、このプログラムを実行した後は保存しないことをお勧めします。
回答を見る
  • ベストアンサー

バックアップするとuserformが使えない

ユーザーフォームを設定した後で、次のプログラムを起動するとユーザーフォームを開こうとしても「パスが無効です」とでて使えなくなります。 Public Sub test() UserForm3.Show ActiveWorkbook.SaveCopyAs ThisWorkbook.Path & "\バックアップ\" & ActiveWorkbook.Name UserForm2.Show Unload UserForm3 Unload UserForm2 End Sub また、プログラム中にシステムエラーとでたり、「オブジェクトが見つかりません」とでたりします。 いったいなぜなのか。どうすれば回避できるのか教えてください。お願いします ちなみにプログラムを実行するときはエクセルファイルと同じ階層に「バックアップ」というフォルダを作ってください。 このプログラムを実行した後は保存しないことをお勧めします。 ユーザーフォームが起動できなくなっても責任はとれません。 エクセルは2000 です。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

>私一人だけ対処できても意味がないんですよね・・・ 2000SR1が標準の環境という事ですか。 #不具合あるバージョンにサービスパックもあてられない状況で #ExcelVBAで何かを提供しろと言われたら私だったら躊躇しますけど #まあ、如何ともし難い状況なのでしょうね。 >コードによる対処をさせたかったんですけれど、どうも無理っぽいですね。 コード全部が提示されたわけじゃないので『無理』と決め付けるのはどうかと。 Appliction.Ontimeを使ってみるという手もあるかもしれません。 SaveCopyAsに問題があるならSaveAsで代替コードを組んでもいいかもしれません。 [CreateBackup プロパティ]を活用した運用に切り替えてもいいかもしれません。 ただ、ThisWorkbookがマクロBookであるという位置づけであれば 本来、バックアップを取る必要があるのかどうか、という意味では ThisWorkbook以外のActiveなデータブックにだけバックアップ処理するというのは 至極真っ当な『コードによる対処』だと思われますが。

iori16
質問者

お礼

SR-1が標準かどうか確かめるのも大変な環境です。 自分は会社の末端の人間で、確認してくれなんて言えないですし、人によってはエクセル2003の人もいました。 コード全部提示は無理です。かなり長いマクロなんで。 ただ、私の環境では、エクセルファイルの新規作成からokボタンのみのユーザーフォームを三つ作り、質問文本文のコードを入れた所、再現はしましたので、最低限の記述になっていると思います。 ついでに言うと、OKを押したときの処理にme.hideにしたりunload meにするかで微妙にエラーメッセージが違いました。 (システムエラーとでたり、「オブジェクトが見つかりません」とでたり、ときたま、エクセルが強制終了したり) しかし、この辺のメッセージと処理内容の違いによる相互関係が毎回変わっていたので質問本文には書きませんでしたが・・・ 全てのパターンで言えることは、 プログラムを起動した後、ユーザーフォームを開こうとしても「パスが無効です」とでることですね。 恐らく、ユーザーフォームのパスとやらが、バックアップ先のファイルに移行してしまったんではないかと思います。 (ただの推測ですが・・) なるほど。手はたくさんありそうですね。 色々試してみます。 色々な手法を教えてくだてくださってありがとうございます。 >>ただ、ThisWorkbookがマクロBookであるという位置づけであれば・・・ 完全なマクロブックという位置づけにするか、正直どうしようか迷っていました。 今回の件で、マクロブックにしようかなっとという考えを持つようになりました。 良いきっかけだったのかもしれません。

その他の回答 (2)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

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/CD001022577.aspx ここから更新してみてください。 #2000は枯れて安定してるイメージがあって個人的には好きなバージョンなんですが #残念ながらサポートぎれなのがどうにも..ですね。

iori16
質問者

お礼

返答ありがとうございます 返事遅れてしまい申し訳ありません エクセルのヴァージョンは 9.0.3812 SR-1 でした。 私一人だけ対処できても意味がないんですよね・・・ 複数人数の人に使わせるので・・・ なので、コードによる対処をさせたかったんですけれど、どうも無理っぽいですね。 幸い、本来の使い方では、ActiveWorkbookとThisWorkbookが同じになることはないと思いますので、 ActiveWorkbookとThisWorkbookが同じときは、そのまま処理を終了させるか、バックアップを取らずに進ませるかさせます。

回答No.1

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

iori16
質問者

補足

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

関連するQ&A

  • エクセルのマクロでUserForm1を作って下記のようなコードを実行す

    エクセルのマクロでUserForm1を作って下記のようなコードを実行すると UserForm1を一瞬だけ表示して消えるのかと思ったのですが、表示されたまま消えません。 Unload UserForm1のところを UserForm1.Hideにしても同じです。 表示されたUserForm1を閉じるにはどうしたらよいですか。 Sub test() UserForm1.Show Unload UserForm1 End Sub

  • UserForm1.Showでエラーになります。1

    Thisworkbookのところで Option Explicit Private Sub Workbook_Open() UserForm1.Show End Sub とプログラミングすると UserForm1.Showでエラーになります。 どうすればよいでしょうか。 Excel2013でプログラミングしています。 UserForm1.Showもきちんと作成済みです。 エラーメッセージは、 実行時エラー’424’ オブジェクトが必要です。 と出ています。

  • ユーザーフォームの切り替えについて・・・

    UserForm1とUserForm2の2つのユーザーフォームがあります。 UserForm1の中にあるcommandButton1をクリックすると、UserForm2が表示される仕組みになっています。 (ちなみに、UserForm2にもコマンドボタンがあり、クリックするとUserForm1に戻るようになっています) UserForm1の方に、 Private Sub CommandButton1_Click() UserForm2.Show 0 Unload UserForm1 End Sub UserForm2の方に、 Private Sub CommandButton1_Click() UserForm1.Show 0 Unload UserForm2 End Sub と記述してあります。 ところが、それぞれのユーザーフォームには、閉じると同時にブックが閉じるように Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) ActiveWorkbook.Save 'ブックを保存 ActiveWorkbook.Close 'ブックを閉じる Application.Quit 'excelを終了 End If End Sub というコードを記述しているため、UserForm1からUserForm2へ移るときにブックが閉じてしまいます。 右上の「×」を押したときだけブックを閉じるようにしたいのですが、どういうコードを書いたらいいのですか? 宜しくお願いします。(*´Д`人)

  • UserForm1.Showノトコロデエラーニナ

    Excel2013でプログラムしていますが、 Thisworkbookのところで Option Explicit Private Sub Workbook_Open() UserForm1.Show End Sub と、プログラミングするとUserForm1.Showのところでエラーになります。 どうしてでしょうか?

  • UserForm1.Showでエラーになります。

    Thisworkbookのところで Option Explicit Private Sub Workbook_Open() UserForm1.Show End Sub と記述するとUserForm1.Showでエラーになります。 どうすればよいでしょうか。 Excel2013で開発しています。

  • Excel97マクロのUserForm

    Excel97でUserFormを表示して 消すのにUnloadでは消えてくれません UserForm.show 処理1 処理2 unload UserForm としているのですが、なぜかUserForm.showで 止まったまま制御が流れません ちょっと教えていただけるとうれしいです

  • UserForm1.Showでエラーになります。

    Thisworkbookのところで OptionExplicit PrivateSubWorkbook_Open() UserForm1.Show EndSub とプログラミングするとUserForm1.Showでエラーになります。 どうすればよいでしょうか。 Excel2013でプログラミングしています。 UserForm1も、きちんと作成済みです。 出ているエラーは、 実行時エラー’424’ オブジェクトが必要です。 と出ます。

  • Excel VBAで別のブックからユーザーフォームの閉じる

    Excel VBAで別のブックからユーザーフォームの閉じたいのですが うまくいきません。 教えてください。 Private Sub CommandButton2_Click() Application.Visible = False Unload Workbook.("材料リスクマップ検索Ver2.xls")UserForm3・・・・※ Workbooks.Close userform3:=ThisWorkbook.Path & "あああ.xls" Workbooks("\いいい.xls").Close savechanges:=False UserForm1.Show vbModeless End Sub ※印のところが赤字にかわります。 コマンドボタン2は、いいい.xlsにあり、フォームを閉じたいのはあああ.xlsのUserform3です。 その後、ファイル名いいい.xlsは閉じます。 コードが間違っているかと思いますが、どんな風にすればよいかわかりません。初歩的なこととは思いますがよろしくお願い致します。

  • エクセルで現状を逐一バックアップできるようにしたいと思っているのですが

    エクセルで現状を逐一バックアップできるようにしたいと思っているのですがうまくいきません。 下記のようにバックアップファイル作成用のVBAを作ってみたのですが、できあがるファイルが「FALSE」という名前の拡張子のないファイルとして出てきてしまいます。 どこがいけないのでしょうか?(XLSファイルをEXCEL2007で作業しています。) Sub バックアップファイル作成() Dim buf As String buf = buf & ActiveWorkbook.Path & vbCrLf ActiveWorkbook.SaveCopyAs failname = buf & "Backup.xls" End Sub また、できればファイル名が[Backup2010/2/22]のように、日付も書き込まれてもらえると助かるのですが、どうすればいいのでしょうか。

  • userform1の終了に同期を取りたい。

    ユーザーフォームを勉強し始めました。 標準モジュールに、 sub oya() userform1.show end sub として、userform1を表示しています。 そしてuserform1で、諸々の設定をしています。 oyaでは、この設定を使って作業をします。 ここで質問です。 oyaの作業は、userform1で設定した内容を使うため、 処理が終わるのを待つ必要がありますが、 その書き方が分かりません。 今現在は、単純にuserform1.showの下に処理を書いているので、 設定する前に空欄を使うような状況になってしまっています。 sub oya() userform1.show  処理ロジック end sub 分かりにくいでしょうが、 宜しくご指導下さい。

専門家に質問してみよう