プロが教えるわが家の防犯対策術!

エクセルのマクロを使い 名前の決まっている特定のシートを
新規ブックにして名前をつけて保存をしたいのです.
色々参考にして以下のようなマクロを書いたのですが
これだと元々のファイル名が変わって保存されてしまいました。
どなたかお知恵をお貸しください。
今作ったマクロ
Sub p()
Worksheets("印刷用日誌").Copy
MsgBox Year(Now) & "-" & Format(Now(), "yy-mm") & "-" & Range("k7")
On Error Resume Next
Application.DisplayAlerts = False
ThisWorkbook.SaveAs Year(Now) & "-" & Format(Month(Now), "00") & "-" & Format(Day(Now), "00")
Application.DisplayAlerts = True
On Error GoTo 0
End Sub

よろしくお願いします

A 回答 (5件)

>ThisWorkbook.SaveAs Year(Now) & "-" & Format(Month(Now), "00") & "-" & Format(Day(Now), "00")


ThisWorkbook はコードが書かれているブックの事。

新規Bookに対してなら、
ActiveWorkbook.SaveAs Year(Now) & "-" & Format(Month(Now), "00") & "-" & Format(Day(Now), "00")
ではないかな?
    • good
    • 0
この回答へのお礼

 新規にブックを作ったのでそちらがアクティブになっている
 という理解が出来ました。
 なぜかactiveだとコードが書かれているブックの意味だと思い込んで
 しまい使う事すら考えませんでした。
 落ち着いて考えると全くその通りです。
めからうろこがおちました。

どうも ありがとうございます。

お礼日時:2009/04/25 07:50

>これで何をしたかったというと利用者が意識しないでシートのコピーを保存する作業をしたかったんです。


なるほど!
そうすると そのブックはあなたが使うのではなく 別の方が使うという事ですね?
そうすると、まず「マクロを有効にして開く」必要がありますよね?(無効にして開かれたら何にもならないです)
で、マクロを有効にして開く為には「マクロのセキュリティレベルを中にする」必要がありますが大丈夫なんでしょうか?
その辺は きちんと意識して(有効にして開く)いただかないといけないと思うのですが、
その辺は大丈夫でしょうか?

この回答への補足

そうですね、マクロを有効にしなければなりませんです。
このマクロは全体の一部分なので、いずれにしてもマクロを使わなければ
やりたい作業が出来ないのでした。
まあ、どっかから得体の知れないマクロ入りのエクセルファイル貰ってきて実行されてしまった場合の問題は有りますけど、マクロを使う事による便利さも捨てがたいですから色々啓蒙する必要はあると思います。
いろいろありがとうございます。

補足日時:2009/04/25 22:41
    • good
    • 0

#3さんのおっしゃる事が ごもっともですね。



上記の操作が そんなに面倒ですか?

シートを新規ブックに移すには。シートを右クリックで「移動またはコピー」→「新しいブック」
を選択すればOKだし、「名前をつけて保存」は新しいブックがアクティブになってる状態で「F12キー」を押せばダイヤログボックスが出てくるし。

まぁでも毎日毎日やる分には面倒でしょうか?
僕もシートを新しいブックにコピーまでは「ボタン」にマクロを登録してますからね。

なので僕の場合、単純に
Sheets("印刷用日誌").Copy
これだけです。

名前をつけるのもそんなに面倒な作業だとは思わないんですけどねぇ?
Excelのメニューバーのヘルプでも色んなサイトでも様々なショートカットが掲載されてるので
ご覧になられてはいかがですか?
    • good
    • 0
この回答へのお礼

いろいろありがとうございます
実際に作成した部分を記載します。
Sub saveascopy()
Worksheets("印刷用設備日誌").Copy
On Error Resume Next
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Format(Now(), "yy-mm") & "-" & Range("k7")
ActiveWorkbook.Close
Application.DisplayAlerts = True
On Error GoTo 0
End Sub
これで何をしたかったというと利用者が意識しないでシートのコピーを
保存する作業をしたかったんです。

お礼日時:2009/04/25 20:24

ここへ質問する前に、マクロの記録モードにして、質問の操作をして


、そのコードをみて、疑問があれば、質問すべきだ。ファイル名を年月と関連付ける行は別として、他はコードの骨格原型が判るはず。どうしてマクロの記録を重用しないのかな。マクロの記録など問題にせずというレベルではないでしょう。
>名前の決まっている特定のシートを新規ブックにして名前をつけて保存・・
意味があいまい。
開いているブックのシート名AAのシートをコピーして
シートタブで右クリック
移動またはコピー
(移動先ブック名)新しいブック
コピーを作成する
の操作をする、
この操作を思いつきましたか。エクセルVBAはまづエクセルの知識ありきなんです。
ーー
マクロの記録は
Sub Macro1()
Sheets("Sheet1").Select 'A
Sheets("Sheet1").Copy
Range("C2").Select
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\XXXX\My Documents\Book2.xls", FileFormat:=xlNormal _
, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
End Sub
となった。
--
Aの行はSheet1はWorkSheets("XXX")とシート名xxxにする。
Book2.xlsの部分は年月指定のファイル名指定コードで置き換えた文字列を作る。
マクロの記録で余分なコードは削除
Range("C2").Select
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
Application.DisplayAlerts = Falseなどを入れる

この回答への補足

すいません、エクセルまともに使った事無いのでした。
日本語の説明も下手なのですいませんです。
マクロの記録も使いますが、何が余分で何が必要か
考えるより、始めから作った方が勉強になると思って
トライした結果でした。
んでは

補足日時:2009/04/25 20:11
    • good
    • 0

すでに回答が出ていますが、ちょっと気になった所があったので



>MsgBox Year(Now) & "-" & Format(Now(), "yy-mm") & "-" & Range("k7")
MsgBox Format(Now, "yyyy-yy-mm-") & Range("k7")

>ThisWorkbook.SaveAs Year(Now) & "-" & Format(Month(Now), "00") & "-" & Format(Day(Now), "00")
ActiveWorkbook.SaveAs Format(Now, "yyyy-mm-dd")

と、した方がスッキリすると思います
    • good
    • 0
この回答へのお礼

このあたりの構文は参考書等に記載あったのをアレンジしたのです。
yy-mm-でセルの値をつなげるやり方が出来るとは思いませんでした
実は&”ー”&を付けてつなげるのはなんだかなーと思っていた所でした

どうもありがとうございます。

お礼日時:2009/04/25 09:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!