[[20240426160351]] 『別名保存したファイルの操作と元ファイルの操作に』(とらじま) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『別名保存したファイルの操作と元ファイルの操作について』(とらじま)

元ファイル(ファイルA)にて、データを取込み加工し、別名保存(ファイルB)します。ファイルBの不要なシート等を削除し、上書き保存してファイルを閉じます。同じ作業を繰り返すので、ファイルAは開いたままにします。

ファイルAの構成
 シート:sheet1,sheet2,sheet3,sheet4,sheet5
 標準モジュール:Module1,Module2,Module3
 ユーザーフォーム:form1

ファイルBの構成
 シート:sheet1,sheet2
 標準モジュール:Module1
 ユーザーフォーム:form1

新規ブックを追加し、必要なシート等のみをコピーして保存しようと思ったのですが、ユーザーフォームの複製ができないので、全部複製して、不要なシート等を削除する方法を選択しました。

<データの加工後から記述> 

ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "ファイルB.xlsm"

 With ActiveWorkbook
  .Names("現場名").Delete '名前の定義削除
  .Worksheets(Array("sheet3", "sheet4", "sheet5")).Delete
   .Worksheets(Array("sheet4", "sheet5")).Visible = False '非表示
   .Application.VBE.ActiveVBProject.VBComponents.Remove _
      Application.VBE.ActiveVBProject.VBComponents("Module2")
   .Application.VBE.ActiveVBProject.VBComponents.Remove _
      Application.VBE.ActiveVBProject.VBComponents("Module3")
End With

<上書きして、ファイルAにて操作の続きをしたい>

※上記コードは、Module2 に記載しています。

ファイルBを上書きして閉じたいのですが、コードで【Save】・【Close】を
記述すると、Module2・3の削除ができません。

ファイルAが勝手に閉じてしまい、ファイルBのコードで動いているので、
モジュールの削除ができないようです。

コードで【Save】・【Close】を記述せず、手動で上書き保存すると、
Module2・3の削除までできますが、ファイルAは同じく勝手に閉じてしまい、
空のEXCELが残った状態になります。

ファイルBの不要なシート等を削除し、手動ではなくコードで上書き保存してファイルを閉じ、ファイルAを開いたままにするにはどうしたら良いでしょうか?

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


 詳細を読んでいませんが、SaveCopyAsを使う局面のように思います。
 これであればファイルAには影響が及びません。
 当方の勘違いであれば無視ください。

(xyz) 2024/04/26(金) 17:50:21


 >.Worksheets(Array("sheet3", "sheet4", "sheet5")).Delete
 >.Worksheets(Array("sheet4", "sheet5")).Visible = False '非表示

 シートを消してから、消したシートを非表示って????
 何を考えているのでしょうか?
(たぶん) 2024/04/26(金) 22:26:50

xyz様
コメントありがとうございます。
SaveCopyAsだと、コピーしたファイルBは閉じてしまって、
そのまま、不要なシート等を削除するといったファイル操作ができないようなので、
再度ファイルBを開いて編集して上書き保存するといった手順になるかなと思います。

たぶん様
すみません。説明用にシートの名前等を変更していて、
非表示のコードは、間違って掲載してしまったようです。

(とらじま) 2024/04/30(火) 12:01:22


 こんな話かと思ったのですが、違いますか? (サンプルです)

 Sub testC()
     Dim f As String

     f = ThisWorkbook.Path & "\" & "BookB.xlsm"
     ThisWorkbook.SaveCopyAs f

     With Workbooks.Open(f)
         .Worksheets("Sheet2").Delete
         .VBProject.VBComponents.Remove .VBProject.VBComponents("Module3")
         .Save
     End With
 End Sub

(xyz) 2024/04/30(火) 13:01:38


xyz様

ファイルBの指定の仕方【With Workbooks.Open(f)】で、無事に解決しました。
ありがとうございました。

(とらじま) 2024/04/30(火) 15:13:56


With … End With は別にポイントじゃないけど。
ご自分で筋書き書いていたじゃないですか。それを実行するだけでしたよ。

なお、複数のファイルを作成するなら、調整したものを一つ作成しておいて
それをFileCopyステートメントで増幅する手もあるでしょう。

(xyz) 2024/04/30(火) 15:50:44


xyz様

With ActiveWorkbook … End With とか With ThisWorkbook … End With で
ファイルBを操作しようとしていたのでうまくいきませんでした。
SaveCopyAs と Workbooks.Open(f) が、まさしくポイントでした。

他のファイルからデータを取込んで加工したものを別名保存、を繰り返すので、
FileCopyステートメントは今回は当てはまらないようです。
また何かの折に使用してみたいと思います。

本当にありがとうございました。
(とらじま) 2024/05/01(水) 14:02:35


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.