[[20180314214147]] 『マクロで保存中のブックのあるシートを削除した形』(あらいぐま) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロで保存中のブックのあるシートを削除した形て保存したい』(あらいぐま)

本学校でご教授いただき、シート1のセルC4のデータを新しいブックの名前とするマクロ付きブックを同じフォルダ内に
保存するマクロを完成することができました。しかも、同じブック名のファイルが存在するときは保存しないで作業を終
了することも実現できました。

 Sub SameFolderSave3()

    Dim thisPath As String  '変数の宣言(自分のブックのフォルダ名格納用)
    Dim newname As String  '変数の宣言(新しいブックの名前格納用)

     thisPath = ThisWorkbook.Path  '自分のブックのフォルダ名を変数に入れる<
     newname = Sheets("Sheet1").Cells(4, 3).Value  'シート1のC4セルのデータを新しいブック名として変数に入れる

 '保存先フォルダに同じ名前のブックがある場合にはその旨を知らせ処理を中止する

     If Dir(thisPath & "\" & newname & ".xlsm") <> "" Then
      MsgBox "同じ名前のブックが存在するので保存せずに処理を終了します。"
      Exit Sub
     End If

     ThisWorkbook.SaveAs Filename:=thisPath & "\" & newname & ".xlsm"  'このブックを同じフォルダ内に別の名前で保存する

 End Sub

共同作業者から、次のような要求があり、困っています。
「新しく保存されるブックには、元のブックのシート1<Sheet1>(新しく作成するブック名の元となるデータと上記マクロを実行
するためのボタンが存在)が削除されたものとなるように、マクロ記述を変更できないか。できれば、本作業を進行するマクロ
(Sub SameFolderSave3()自身も削除した形で保存できればいいんだが。)」

上記のような要求に応えることは可能なのでしょうか。
ご教授いただければ幸いです

因みに、Sheet1を削除するマクロとして以下のものがあるという情報を得てはいますが・・・

     Application.DisplayAlerts = False
     Worksheets("Sheet1").Delete
     Application.DisplayAlerts = True

< 使用 Excel:Excel2013、使用 OS:Windows7 >


発想を変えるとよいとおもいます。

Sheet1を削除するんじゃなくて、Sheet1以外の全シートを新規ブックにコピーしてその新規ブックを保存してやればよいです。

そのようにすると、標準モジュールに記述したマクロは新規ブックに保存されませんし、Sheet1のボタンも当然保存されません。

やり方がわからない場合は、まず「マクロの記録」で手動操作を記録させるところから手を付けてみてください、
(もこな2) 2018/03/14(水) 22:09


 少し変わったことをお聞きします。
 (1) UserFormは使われたことがありますか?
 (2) シート上のマクロの実行のためのボタンは何個ありますか?
 (3) マクロはどこに書かれていますか?
   標準モジュール、ThisWorkbook、Sheet別に個数を

( NN ) 2018/03/15(木) 01:00


 発想を変えるといえば、[[20180305231430]]『マクロなしで保存したい』の記事があります。
 エクセルの拡張子.xlsmをxlsxに変換して保存するとマクロは全て消去され、両方のシートが保存されます。
 新しく作成された.xlsxの<Sheet1>を手動で削除して上書き保存すれば可能だと私は思います。
 マクロなしのブックを作成・保存する作業は非常に簡単なマクロです。
 参考まで。

( NN ) 2018/03/15(木) 02:15


NNさんのアドバイスで進めるなら、SaveCopyAsメソッドを調べてみるとよいかも。
(たしか、マクロの記録では出てこなかったかとおもうのでヒントだけ)
(もこな2) 2018/03/15(木) 02:26

 チョット補足しておきます。
 もう一つのスレの方の「新しい名前でブックを保存」の際に拡張子を.xlsxに変更して保存するだけですよ。
 保存後には新しい.xlsxのブックの方がActiveになっているので、
 そのままSheet1を削除して上書き保存するマクロを追加すれば終わりだと思います。
 (マクロは標準モジュールに書かれていますよね?)
( NN ) 2018/03/15(木) 06:33

もこな2さま、NNさま、お付き合いいただき本当にありがとうござ上手す。
マクロの所在ですが、すべて標準モジュールです。ちなみに、あと一つ、新しいブックで
作業するためのマクロがあります。ですので、シート1にマクロボタン1つ、シート2にあ
と1つです。
したがって、「Sheet1以外の全シートを新規ブックにコピーしてその新規ブックを保存」
や「エクセルの拡張子.xlsmをxlsxに変換して保存」では問題がありそうです。
現在のマクロで新しいブックを作成後、改めてシート1を削除(必要がなくなるマクロも)
して、上書き保存するのが一番よい方法のようです。
(あらいぐま) 2018/03/15(木) 17:23

状況がちょっとわからないです。
>マクロの所在ですが、すべて標準モジュールです。
>新しいブックで 作業するためのマクロがあります。
>シート1にマクロボタン1つ、シート2にあと1つです。

整理するとこういうこと?
1.ブックの標準モジュールにコードが記述してある。
2.シート1にフォームコントロールのボタン(標準モジュールのコードを呼び出す)が設置してある。
3.シート2にフォームコントロールのボタン(標準モジュールのコードを呼び出す)が設置してある。
これを↓
1.標準モジュールのコードはそのまま。
2.シート1はボタンも含めて削除
3.シート2はそのまま
という状態にしたい。ただし、その操作は、シート1のボタンを押すことにより実現したい。

であれば、一度、SaveCopyAsメソッドで、丸ごと別ブックとして作ってやって、作ったブックのシート1を削除してから、保存って感じでいけそうな気がしますがどうでしょうか?

(もこな2) 2018/03/15(木) 17:41


 私も状況が分からなくなりました。
 最終段階で、成果品・提出物からマクロやコントロールを削除することはよくあることですし、
 「共同作業者の要求」がまさにそれだと勘違いしましたね。
 私には希望されている作業が理解できないのでパスしますね。
( NN ) 2018/03/15(木) 19:06

もこな2さん、なあ〜だ。。。という気持ちです。
ありがとうございました、実現しました。
複雑に? こだわりすぎ? そんな言葉が共同作業者から浴びせられてしまいました。
(あらいぐま) 2018/03/15(木) 21:19

コメント返信:

[ 一覧(最新更新順) ]


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