• ベストアンサー

Excelマクロで、ファイルの閉じ方

作成している実行ファイルabc.xlsのマクロについて質問です。 (過去作られたものを修正しているので、私にも説明できないコードはあります) 実行すると、別ファイルSheet1.csvを開き、 Sheet1.csvの4~1024行目を、abc.xlsにコピーし、 Sheet1.csvを閉じる。 といったことをやりたいです。 ※ここまでのソースに、Sheet1.csvを開く、という部分があります。  Sheet1.csvはアクティブになっています。 ※Sheet1.csvファイルには、Sheet1というシートが1つだけあるものとします。 rng1 = "4:1024" rng2 = "4:4" rng3 = "A4" CurName = "abc.xls" sheetname = "Sheet1" ActiveSheet.Rows(rng1).Copy Windows(CurName).Activate Sheets(sheetname).Select   Range(rng2).Select '特に意味は無いと思われる Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Range(rng3).Select '特に意味は無いと思われる Application.CutCopyMode = False Dim ACT As String ACT = sheetname & ".csv" 以上を実行すると、 Sheet1.csvを開き、コピーする所までは正常に実行できます。 抜粋したのでこれだけじゃ意味不明な部分があるかもしれませんが、コピー完了までは正常に動いております。 この後に、Sheet1.csvを閉じるコマンドを入れたいのですが、 検索等して調べたコードではエラーが発生し、閉じることができません。 例えば「新しいマクロを記録する」でExcelに作ってもらったコードだと、  Windows("Sheet1.csv").Activate  ActiveWindow.Close で閉じることができるのですが、 これを記述してもエラーが出ます。 どのように書けばよいのでしょうか。

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

  • ベストアンサー
  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.1

一例ですが、 Dim csvFileCaption ※Sheet1.csvはアクティブになっているところで csvFileCaption = ActiveWindow.Caption とし、閉じたいときに Windows(csvFileCaption).Close (True) とするのではいかがでしょう。

tktk1228
質問者

お礼

回答ありがとうございます。 挙げていただいたコードで、アクティブなファイルは閉じることができました。 が、どうやら私(が修正している)のコードだと、閉じたい方のファイルがアクティブになっている瞬間が無いようで、 (アクティブにせずともファイル操作が可能なのかはわかりませんが) 色々な場所にcsvFileCaption = ActiveWindow.Captionを仕込んで実行してみましたが、 結局目的のファイルは消せませんでした。 また、Dimの宣言は、As以降を書かなくても正常に動くんですね、 知りませんでした。

tktk1228
質問者

補足

すみません、できました。 コピーの直後に入れれば正常に動作し、目的のファイルを閉じることができました。 1行ずつ試したつもりでしたが、勘違いだったようです。 申し訳ありません。 投稿内容の修正方法がわからないので(不可能?)、 こちら「補足」の方に書かせていただきます。

その他の回答 (1)

  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.2

こんにちは。 抜粋されている部分の間に新しくコードを足して下記のようにして下さい。 rng1 = "4:1024" rng2 = "4:4" rng3 = "A4" CurName = "abc.xls" sheetname = "Sheet1" ActiveSheet.Rows(rng1).Copy '#################################################################### Dim csvFile As Workbook Set csvFile = ActiveWorkbook '設定 '#################################################################### Windows(CurName).Activate Sheets(sheetname).Select Range(rng2).Select '特に意味は無いと思われる Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Range(rng3).Select '特に意味は無いと思われる Application.CutCopyMode = False Dim ACT As String ACT = sheetname & ".csv" そして、処理の最後に閉じる部分を足してください。 '#################################################################### csvFile.Close '閉じる '#################################################################### これで如何でしょう?  Windows("Sheet1.csv").Activate  ActiveWindow.Close だと、Sheet1.csvをアクティブにして制御がそちらのBOOKに移っているためにCloseのコードが実行できなくなっているんだと思います。なのでSheet1.csvがアクティブでない状態で閉じる方法でないとうまく行かないように思えます。

tktk1228
質問者

お礼

回答ありがとうございます。 無事閉じることができました。 閉じる時はアクティブにすべきものだと勝手に思い込んでおりました。

関連するQ&A