質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

5回答

14686閲覧

VBAで連続してブックを保存、前ブックではなく元ブックから作成・保存したい

hokosugi

総合スコア63

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/07/04 22:17

編集2018/07/05 02:29

実現したいこと

エクセルマクロブック(.xlsm)を元ブックにして複数サブフォルダ内画像を貼り付けてサブフォルダ名を付けて保存する複数ブックを作成したいが、前ブックの上書きの形式でブックが作成されてしまう(画像が上乗せされていくので前実行の画像が見えてしまう)。

vba

1ThisWorkbook.SaveCopyAs Filename:=picFolderPath2 & pic_split(2) & "xlsx" '参考, FileFormat:=xlOpenXMLWorkbook

やってみたこと

saveAsメソッドではなく上記のようにsaveCopyAsメソッドを使う。
ただ、保存されますが開くことは出来ず(ファイル形式、ファイル拡張子が正しくないmsgboxが立ち上がる)、上書きされているのか確認出来ません。
"xlsx"を元ブックと同じ"xlsm"に換えるとエクセルアイコンが白紙の「名前.xlsm」ファイルになり開けません。

何か良い方法はありませんか?
それともworkbookを新規に作成するところから始めないといけないでしょうか?

よろしくお願いします。

追記

"xlsm"のドットが抜けていて".xlsm"で正常にコピー保存されました。但し、コピーの内容もsaveAsと変わらず上書きされています。そこで

vba

1Set a_sheet = Thisworkbook.Worksheets(1) 2 3中略 4 5ThisWorkbook.SaveCopyAs Filename:=picFolderPath2 & pic_split(2) & ".xlsm"

vba

1ThisWorkbook.SaveAs filename:=picFolderPath2 & pic_split(2), FileFormat:=xlOpenXMLWorkbook 2Set FSO = CreateObject("Scripting.FileSystemObject") 3Set folderObject = FSO.getfolder(picFolderPath2) 4For Each new_wbs In FSO.getfolder(folderObject).Files 5set new_wb = Workbooks.Open(new_wbs) 6if new_wb.Name = pic_split(2) then 'ここはざっくりです、試す環境にないので' 7Set a_sheet = new_wb.Worksheets(1) 8 9中略 10 11new_wb.save

こんな感じでテンプブックシートを直に開かずに一旦先に保存してから画像転記を実行したらよいのでは?
と考えました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

自己解決法:

①元ブックシートを新ブックにコピー
thisworkbook.Worksheets.Copy

②新ブックシートをアクティブして画像貼付け等作業実行

③新ブック、元ブック保存

後から考えるとなんと単純かと費やした時間を考えると空しくなるますが、
一応解決法が見つかりましたのでよかったです。

投稿2018/07/07 00:41

hokosugi

総合スコア63

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

質問を良く理解していませんが、xlsmのシートをテンプレートにして新しくブックを作成、そのブックに画像を貼り付けて保存、という流れでしょうか。
こんな感じのコードでどうでしょうか。

VBA

1Dim thisbook As Workbook 2Dim newbook As Workbook 3 4' xlsx形式で保存するときのメッセージ抑制 5Application.DisplayAlerts = False 6 7' 元のxlsmを保持 8Set thisbook = ActiveWorkbook 9 10' 全シートをコピーして新ブックを作る 11thisbook.Worksheets.Copy 12 13' アクティブブックが新ブックになっているので保持 14Set newbook = ActiveWorkbook 15 16' 新ブックを編集 17'画像貼り付け 18 19' 名前を付けて保存&閉じる 20newbook.SaveAs picFolderPath2 & pic_split(2) & "xlsx", xlOpenXMLWorkbook 21newbook.Close 22 23' xlsx形式で保存するときのメッセージ回復 24Application.DisplayAlerts = True 25

投稿2018/07/05 04:57

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hokosugi

2018/07/07 00:46

返事が遅くなりました。 ご回答のやり方が今まで考えて実行して解決した私のとのほぼ同じ でした。先に読んでいればよかったと残念に思っています。 何はともあれ、ありがとうございます。
guest

0

まず、「xlsx」に[.]が付いてないですけど、pic_split(2)に付いてます?

次に、SaveCopyAsってコピーを保存するから、拡張子を変えるというのはどうかと。
むしろ、正しく開ける可能性の方が少ないでしょう。
(なぜ拡張子を戻しても開けないのかは不明ですが)

SaveCopyAs で xlsm にしないのは、恐らくマクロを残したくないからでしょうか?

そうなると、手順としては、
1.「SaveCopyAs」で xlsm として一旦保存
2.保存した xlsm を開き直して、SaveAs で xlsx として保存
3.保存した xlsm を削除
という流れになるのではないでしょうか。

投稿2018/07/05 00:40

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hokosugi

2018/07/05 02:28 編集

ご回答ありがとうございます。ドット付いていました、この質問を書く際に消えてしまったのかもしれません。ただ、"xlsm"のエラーはドットが抜けていたためでした。修正し正常に保存されましたが、問題解決には至りませんでした。追記で対策を考えましたが、セーブの段階でクリア出来るほうが簡単でいいので教示されました手順も書いてみたいと思います。
ExcelVBAer

2018/07/05 01:48

たぶんお分かりだとは思いますが念の為、 「カンマ」=[,] 「ドット」=[.] となります。 ※余談ですが、CSV は カンマ セパレート バリュー の略で、カンマで区ったデータ形式、という意味です。(TSVはタブ区切りです)
hokosugi

2018/07/05 02:28

あ、そうですww 今カンマ区切りの複数の整数に紐づけて転記するコードを調べていてカンマ頭になってまして・・・ありがとうございます。
guest

0

テンプレート形式(マクロ付?)だと、開いた瞬間に別ファイルになるので、上書きになることがありません。
敢えて選択のなら上書きになりますが。
その辺も考慮して上手く使えればいかがでしょうか?

投稿2018/07/05 00:35

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hokosugi

2018/07/05 01:32

ご回答ありがとうございます。そう始めは考えていましたが、うまくいきません。初心者ですので兎にも角にも動くコードを書くしかありません。
mattuwan

2018/07/05 04:30

ん。テンプレートならSaveAsで保存しちゃえばよくよくないですか?
hokosugi

2018/07/05 06:16

テンプレートというのは拡張子が"xltx"のコピー用のファイルなんですね。テンプレート形式とはこの別ファイルのことではなく、テンプレートとして使っているからテンプレート形式だと勝手に判断しておりました。初心者ですのでご容赦を。帰ったら早速設定したいと思います。貴重なご意見ありがとうございます、助かります。
guest

0

SaveCopyAsで保存したブックにはマクロが入っているので、マクロなしブックの形式で保存するとダイアログが出ているんだと思います。
こちらのように、シートだけコピーするようにしては?

投稿2018/07/04 23:27

sysjojo

総合スコア325

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hokosugi

2018/07/05 01:33

ご回答ありがとうございます。有益な情報ありがとうございます。あとで読んでみたいと思います。取り急ぎお礼いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問