• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:もしも新規Excelファイルを開いてる場合は閉じる)

Excelファイルを開いている場合の処理

このQ&Aのポイント
  • 新規Excelファイルを開いている場合は閉じる処理を行いたいですが、コードを実行しても正常に処理されません。
  • ユーザーがBook1またはテスト用ファイルを開いている場合に、それらを閉じる処理をしたいですが、コード内でフラグが正しく設定されずうまく動作しません。
  • ws.Name = 'Book1.xls'やws.Name = 'テスト用.xls'としても、Book1を開いている場合にはフラグがTrueにならず、問題があるようです。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

こんにちは。お邪魔します。 #1さんのご回答、冒頭4行で必要な解決策となり得ると思います。 ただ、それで十分かな?という疑問がありますのでサンプルを提示してみます。 ' ' フラグが必要ない場合 Sub Re8067327()   Dim wbk As Workbook   For Each wbk In Workbooks     If wbk.Name Like "Book#" Or wbk.Name = "テスト用.xls" Then       wbk.Close     End If   Next End Sub ' ' フラグが必要な場合 Sub Re8067327a()   Dim wbk As Workbook   Dim flg As Boolean   For Each wbk In Workbooks     If wbk.Name Like "Book#" Or wbk.Name = "テスト用.xls" Then       flg = True       wbk.Close     End If   Next   If flg Then     ' ' 閉じるべきブックが見つかった場合   Else     ' ' それ以外の場合   End If End Sub ' ' 【未保存新規ブック】【テスト用.xls】を分けてフラグが必要な場合 Sub Re8067327b()   Dim wbk As Workbook   Dim flg1 As Boolean   Dim flg2 As Boolean   For Each wbk In Workbooks     If wbk.Name Like "Book#" Then       flg1 = True       wbk.Close     End If     If wbk.Name = "テスト用.xls" Then       flg2 = True       wbk.Close     End If   Next   If flg1 Then     ' ' 未保存新規ブックが見つかった場合   ElseIf flg2 Then     ' ' テスト用.xlsブックが見つかった場合   Else     ' ' それ以外の場合   End If End Sub 要は 未保存新規ブックに付く仮の名前は"Book1"だけとは限らない、ということです。 もし、ブックを閉じる処理だけで良ければ、フラグは要りませんから、 For Each ループ一個で完結できます。 その他の場合は、どのようにflgを定義して条件分岐するかによって、 書き方が変わって来ます。 なお、蛇足ですが、  wbk.Name Like "Book#" は、Book1-Book9、9種の未保存新規ブックに対応していますが、 より多くの未保存新規ブックに対応させる必要があるとお感じになったならば  wbk.Name Like "Book#" の部分を  wbk.Name Like "Book#" Or wbk.Name Like "Book##" に置換するような要領で対応します。 それから、   wbk.Close と書いて、wbkが未保存ならば、保存のダイアログが表示されて 保存するかどうか問う、という仕様ですから、 恐らく引数を指定しないこのままの形が質問者さんの求める方法でしょうから、 その点は問題ないと思います。 もし、そうではなくて、 保存するか保存しないかをダイアログを表示せずに強制して 閉じる、ということでしたら、 まずは.Closeメソッドについてヘルプを確認してみるとよいと思います。 以上です。

fanneaiam
質問者

お礼

ありがとうございました 無事解決致しました

その他の回答 (2)

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.3

では、私も老婆心を出して、ちょっと違う切り口から。 とりあえず「新規ワークブック=保存されていない=『名前が付いていない』」ので、 ご提示のコード > Workbooks("Book1.xls").Close が機能しない、と言うのは前お二方と同意権です。 なので、私はこの「保存されていない」を利用したコードを紹介。 Private Sub Workbook_Open() Dim WB As Workbook     For Each WB In Workbooks         If WB.Path = "" Then             WB.Close         End If     Next End Sub と言う、単純なコードです。 「ブック.Path」は、指定ブックが保存されているフォルダ名を返します。 要するに「保存されていない」のであれば、.Pathは空白を返しますので、 それを利用して閉じるかどうか判断してやる、と言う内容です。 「テスト用.xls」も含めて閉じるなら、     If WB.Path = "" Or WB.Name = "テスト用.xls" Then と書き加えてやればOKです。 #2さんと同じ見解、「閉じるだけならフラグは不要」と言う考え方です。 フラグが必要と言うことでも、質問文中のコードを見る限り応用できると思うので ここでは割愛させて頂きます。 ・テスト用.xls ・新規ブック ・その他の既存ブック の3つを開いた状態で走らせると、その他既存ブック以外が閉じられると思いますので、 とりあえず、ご確認くださいませ。 でも本当の問題は、 コレをどこに組み込んでどんなタイミングで走らせるか? なのかもしれませんね。

fanneaiam
質問者

お礼

こんな方法もあるんですね、ありがとうございます

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.1

ウインドウズ側の設定次第 の、ところもありますが、 未保存のファイルには、拡張子がつかない んじゃ、なかったでしたっけ? とにかく、 Book1を見つけたとき Book1.xksを閉める。 こうしてますよね? これ、別物ですよね? あと、ネット漁ってみたのですが Workbooks("Book1").Close SaveChanges := False に、なってましたよ? 以下、余談ですが これ、勝手に閉められるの わたし的に、目の前で起こったら 「勘弁してよ」 ですね、 練習用だとは思いますが、こういうのって えてして、 無効化、忘れ易いんですよね、 組み込まないことを、 強く強く、お勧めさせてください。 … 老馬身ですね、 済みません。 如何でしょうか? とんちんかんなことを言っていたなら済みません。 でもなお、 お役に立てていたならば幸いです。

関連するQ&A