dポイントプレゼントキャンペーン実施中!

エクセル、マクロとも初心者です。
(VBAはわかりません)

エクセルのテンプレートファイルを開いて、必要箇所だけ入力すると、その日の日付をファイル名として、<名前を付けて保存する>ようなマクロを作りました。

このままだと、マクロも一緒に保存されてしまいますよね。

マクロを含まずに、<名前を付けて保存>させるマクロって可能ですか?
できるとしたら、どうやればいいでしょうか。

A 回答 (4件)

こんにちは。



今は(Excel 2002以上)は、直接、VBEditor 側にアクセスするコードはセキュリティの関係で嫌われることもあります。Excel 2007 の場合は、拡張子で分別できますから、マクロは切り落とされます。今回は、テンプレートということで、あえて、このようなコードになるのであって、本来は、アドインなどで処理したほうが良いかもしれません。アドインの場合は、ThisWorkbook をActiveWorkbook にすればよいはずです。

シートモジュールにマクロがある場合は、
      sh.Copy After:=wb.Sheets(wb.Worksheets.Count)
と、その下の行のコメントブロックとを切り替えてください。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Dim shCnt As Integer
  Dim wb As Workbook
  Dim i As Integer
  Dim sh As Worksheet
  Dim nSh As Worksheet
  Dim fName As String
  
  If Not ThisWorkbook.Name Like "*.x?t" Then
    Cancel = True
    fName = ThisWorkbook.Name
    fName = Left$(fName, Len(fName) - 1)
    shCnt = Application.SheetsInNewWorkbook
    Application.SheetsInNewWorkbook = 1
    Set wb = Workbooks.Add
    wb.Worksheets(1).Name = "temp"
    Application.ScreenUpdating = False
    For Each sh In ThisWorkbook.Sheets
      sh.Copy After:=wb.Sheets(wb.Worksheets.Count)
      ''シートモジュールマクロがある場合(上のコード切り替えすること)
      'Set nSh = wb.Sheets.Add(After:=wb.Sheets(wb.Worksheets.Count))
      'nSh.Name = sh.Name
      'sh.Cells.Copy nSh.Cells(1, 1)
    Next sh
    wb.Sheets(1).Activate
    Application.ScreenUpdating = True
    Application.DisplayAlerts = False
    wb.Worksheets(1).Delete
    Application.DisplayAlerts = True
    Application.SheetsInNewWorkbook = shCnt
    ChDir Application.DefaultFilePath
    i = 1
    '同名ファイルを探す
    Do Until Dir(fName & i & ".xls") = ""
     i = i + 1
    Loop
    fName = fName & i & ".xls"
    
    Application.Dialogs(xlDialogSaveAs).Show fName, 1
    ThisWorkbook.Close False
    Set wb = Nothing
  End If

End Sub


#3さんのご指摘のマクロですが、マイクロソフトの定義(プログラマーズガイド)からすると、今回のイベント型は、マクロと呼ばないそうです。マクロは、引数を持たないパブリックなSub プロシージャのことだけを指しますので、除外されます。しかし、多くの方は、あまり、これについては、明言は避けているようです。理由は、マクロそのものの意味が、ミクロの反対で、全体のひとつのタスクを指すから、厳密な意味を持たせると、言葉としての原義と離れてしまうように思います。
    • good
    • 0
この回答へのお礼

Wendy02さま

ご回答ありがとうございました。
勉強不足で、みなさんの指導内容についていけない面もありますが、
教えていただいたことをこれからゆっくり試してみます。

お礼日時:2008/12/07 16:10

こんなマクロでもできそうです



Sub Macro1()
Dim ws As Worksheet
 Set ws = ActiveSheet '元々開いていたシートを退避
 Worksheets.Copy '全てのワークシートを新しいブックにコピー
 ActiveWorkbook.SaveAs "C:\Temp\" & Format(Date, "YYYYMMDD") & ".xls" '新しいブックを日付をファイル名にして新規保存
 ActiveWorkbook.Close '新しいブックを閉じる
 ws.Activate '元々開いていたシートを表示
End Sub

なおマクロとはVBAで記述した「処理の固まり」ですからマクロ≒VBAですよ
    • good
    • 0
この回答へのお礼

zap35さま

ご回答ありがとうございました。
教えてくださったマクロ、試してみます。

お礼を一度投稿したはずなんですが、
反映されていないので、もう一度・・・
不慣れなので、重複していたらごめんなさい。

お礼日時:2008/12/07 16:22

ThisWorkBookに下のコード貼り付けてください。




Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim myMacro As Object
For Each myMacro In ThisWorkbook.VBProject.VBComponents
With myMacro
If .Type = 100 Then
.CodeModule.DeleteLines 1, .CodeModule.CountOfLines
Else
Application.VBE.activeVBProject.VBComponents.Remove myMacro
End If
End With
Next myMacro
End Sub

使用するときは、(マクロ・セキュリティ)の(Visual Basic Projectへのアクセスを信頼する)にチェックを入れてください
    • good
    • 0
この回答へのお礼

kmmk16さま

早々にご回答をありがとうございました。
4名の方全員にどうしてポイントをつけられないのでしょうか。
ポイントなしになってしまって申し訳ありません。

教えてくださったこと、試してみます。
感謝!


ご回答ありがとうございました。
試してみます。

お礼日時:2008/12/07 16:13

ワークシートを新しいブックにコピーして保存します。

この回答への補足

回答ありがとうございます。

いまさらですが、
質問タイトルを間違えてしまいました(ドジ・・)

保存するときに、マクロを含めずに保存させる、というマクロは作成できますか?

というのが質問の趣旨です。混乱させてゴメンナサイ。

なぜこんなマクロが必要かと言うと、
超初心者がファイルを扱うので、上書きされないよう、自動で新規保存させたいためなんです。

その時にマクロをのぞいて自動保存できたらいいな、と思ったものですから・・・

補足日時:2008/12/07 01:12
    • good
    • 0
この回答へのお礼

hana-hana3さま

早々にご回答をありがとうございました。
ポイントなしになってしまって申し訳ありません。
感謝しております!

お礼日時:2008/12/07 16:18

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