• ベストアンサー

ExcelVBAで特定のブックをcloseしたい

よろしくお願いします。Excel2000ですが、2002,2003,2007でも利用できることを前提に考えています。  複数のExcelブックを開いているとき、特定のファイル名のブックを閉じる方法を考えています。  2通り考えたのですが、いずれもだめでした。デバッグ機能でステップインしながら確認したのですが、エラーにもならず、closeメソッドを通過していました。 以下のVBAはなにか誤りがあるのでしょうか? (その1)  For i = 1 To Workbooks.Count   If Left(Workbooks(i).Name, 2) = "v3" Then    msw = Workbooks(i).Name    If msw <> "V3main.xls" Then     Workbooks(msw).Close    End If   End If  Next (その2)  For Each wb In Workbooks   If Left(wb.Name, 2) = "v3" Then    MsgBox (wb.Name)    If wb.Name <> "V3main.xls" Then     With wb      .Saved = True      .Close     End With    End If   End If  Next wb

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 #1さんのご指摘のように、大文字・小文字のBinary Compare モードの問題でしょうけれど、 If InStr(1, wb.Name, "v3",1)>0 Then このように、TextCompare モードにすればよいと思います。Option Compare Text にして、Like 演算子を使う方法もありますが、手間が掛かります。 '例: '------------------------------------------- Sub Test1() Dim msw As String Dim i As Long   For i = 1 To Workbooks.Count     msw = Workbooks(i).Name   If InStr(1, msw, "v3", 1) And StrComp(msw, "V3main.xls", 0) <> 0 Then      MsgBox msw 'チェック用     'Workbooks(msw).Close 'うまく行ったら、「'」を外してください。     Beep   End If  Next End Sub

uda2009
質問者

補足

ご丁寧な回答をありがとうございました。  私の手抜きなコーディングのせいで混乱させてしまったようで、申し訳ありませんでした。  #1の方への補足にも書かせていただきましたが、無意味なことを承知の上で記述したコードでしたので、動作には影響がありませんでしたが、回答をお願いする身としては、浅はかだったと反省しております。  また、機会がありましたら、今度は質問内容を整理してまいりますので、よろしくお願いいたします。

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

> Left(Workbooks(i).Name, 2) = "v3" > wb.Name <> "V3main.xls" "v3" or "V3" Vは大文字?小文字? によるのでは。

uda2009
質問者

補足

早速のご回答ありがとうございました。  せっかくご回答いただいたのに、WorkBookがCloseできなかったのはもっと別のことが原因でした。  さらに私の手抜きなコーディングで惑わせてしまって申し訳ありません。 ご指摘の通り、2行目で"v3"で始まるファイル名のみ対象としているため、4行目の"V3main"は意味がありません。  実際に、ステップインで挙動を確認していくと、Closeのステップを無事に通過してしまいます。Closeのステップを通過しているのに実際にはWorkBookがCloseされないことが問題でした。  その原因ですが、上記のコードを書いたプロシージャが別のPrivate Subから呼び出されていることによるものでした。  現在は、上記のステップを呼び出す元のPrivate Subに直接記述することで解決いたしました。  お騒がせして申し訳ありませんでした。

関連するQ&A