ExcelのVBAを修正、追加してそのまま保存するとファイルサイズが増えていきます。そのためにこのファイルを実行するとエラーが発生してしまうことがある。
私はこれを回避するために一度マクロモジュールを抜いてシートだけ保存し、モジュールのインポートを行い合成してファイルの管理をしています。これがマクロを変更する度におこなうのが手間である。何方か良い方法があれば教えてください。

A 回答 (1件)

先ずは、マクロの整理をしてみては如何でしょうか。

使用しないマクロは削除するとか。次に(他のファイルでも)頻繁に利用するマクロは、個人用マクロブックに保存して、実行時はそこから呼び込むといった方法があります。さらに、コマンドボタンに登録して、ツールバーの一部としても利用することができます。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルマクロでファイルを保存して閉じるときにファイル名に変数を付加して保存したいです。

エクセルマクロでファイルを保存して閉じるときにファイル名に変数を付加して保存したいです。

具体的にはファイルが閉じられるときに固定した名称の後ろに日付などを入れた形で保存したいと考えています。
どのように書けばよいのかわからなくて困っています。
教えてください。
宜しくお願いいたします。

Aベストアンサー

 yurarin99 さんのスキルにもよろうかと存じます。

1)先ず、お望みの名前でブックを保存するという動作を、普通に[新しいマクロの記録] を採ってみてください。
 ここで、ファイル名にスラッシュ「/」を使うことはできませんので、「(09/11/13)」というような形式で日付文字列を付加することはできませんね。スラッシュを省くかアンダーバーやピリオドなどのお好みの文字に換えて保存なさってください。

2)次に、上記で保存したマクロのコードの中で「(09_11_13)」の部分を
(" & Replace(Date, "/", "") & ")

(" & Format(Date, "yy_mm_dd") & ")
などに書き換えてマクロを実行するとお望みのことが達成されます。

3)自ブックでの操作でしたら、「Workbook_BeforeClose」イベントなどに記載しておけば、終了時に、自動的に保存できます。しかし、保存済みブックに逐一マクロが付随しますので、他のブックにマクロを記載しておいて、保存するブックをアクティブにしたタイミングで「ActiveWorkbook」を保存するのが好ましいかとも存じます。

 yurarin99 さんのスキルにもよろうかと存じます。

1)先ず、お望みの名前でブックを保存するという動作を、普通に[新しいマクロの記録] を採ってみてください。
 ここで、ファイル名にスラッシュ「/」を使うことはできませんので、「(09/11/13)」というような形式で日付文字列を付加することはできませんね。スラッシュを省くかアンダーバーやピリオドなどのお好みの文字に換えて保存なさってください。

2)次に、上記で保存したマクロのコードの中で「(09_11_13)」の部分を
(" & Replace(Date, "/",...続きを読む

Qフォルダ内のexcelファイルを順に開いてマクロ有効ブックに別名保存して閉じるマクロを作りたい

マクロは難しい・・・

https://oshiete.goo.ne.jp/qa/2598781.html
上記URLでフォルダ内の全ファイルを開くマクロがありましたので参考にしていたのですが別名で保存の段階で詰まってしまいました。貴重な休日がああ~~
現在仕事の引き継ぎでマクロ非対応のファイルをマクロ有効にしようとしているのですが多いと1フォルダに100個、全部で400以上あるため自動でできたらなあと考えています
やりたい作業は、

1.同じフォルダにあるファイルを開く
2.別名で保存でマクロ有効ブックとして保存(名前は開いたファイルのまま)
3.閉じる
4.次のファイルを開く
5.1~4をフォルダ内のファイル全てに適用するまで繰り返す

というものです
URL先のコードに別名で保存のコードを入れればいいんじゃん!やったぜひとりでできるもん!と思い追加したいマクロを記憶しながらコードを見て作ってみたのですが同じ名前で保存されたり end sub が必要などとエラーが出て上手くいきませんでした(´;ω;`)

Aベストアンサー

失礼しました。パスの指定が不完全でした。これでどうでしょう。

Sub sample()
Dim Fs, Fl, Fn, wb
Set Fs = CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path).Files
For Each Fl In Fs
Fn = ThisWorkbook.Path & "\" & Fl.Name
If Right(Fn, 5) = ".xlsx" Then
Set wb = Workbooks.Open(Fn)
Fn = Left(Fn, Len(Fn) - 5) & ".xlsm"
Application.DisplayAlerts = False
wb.SaveAs Filename:=Fn, FileFormat:=xlOpenXMLWorkbookMacroEnabled
wb.Close
Application.DisplayAlerts = True
End If
Next
End Sub

失礼しました。パスの指定が不完全でした。これでどうでしょう。

Sub sample()
Dim Fs, Fl, Fn, wb
Set Fs = CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path).Files
For Each Fl In Fs
Fn = ThisWorkbook.Path & "\" & Fl.Name
If Right(Fn, 5) = ".xlsx" Then
Set wb = Workbooks.Open(Fn)
Fn = Left(Fn, Len(Fn) - 5) & ".xlsm"
Application.DisplayAlerts = False
wb.SaveAs Filename:=Fn, FileForma...続きを読む

Qエクセルで<名前をつけて保存>するマクロに、保存時マクロを含めて保存させることは可能ですか

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

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

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

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

Aベストアンサー

こんにちは。

今は(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 プロシージャのことだけを指しますので、除外されます。しかし、多くの方は、あまり、これについては、明言は避けているようです。理由は、マクロそのものの意味が、ミクロの反対で、全体のひとつのタスクを指すから、厳密な意味を持たせると、言葉としての原義と離れてしまうように思います。

こんにちは。

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

シートモジュールにマクロがある場合は、
      sh.Copy After:=wb.Shee...続きを読む

Qエクセル:保存するときに、標準モジュールに書かれたマクロの実行

よろしくお願いします。
エクセルのVBAについての質問です。

◆(上書き)保存をするだけ(ツールバーのフロッピーマークを押すだけ)で、『自動的に標準モジュールに書かれたある特定のマクロを必ず実行してから保存する』という方法はありますか?あれば教えてください。

◆私が作った簡易システムをエクセル初心者の入力担当者のために上記のことを考えています。たとえば、「保存終了させる前に必ずこのボタンを押してこのマクロを実行してね」と説明してもうっかり忘れることが多いという方のための方策を考えてのお願いです。

以上、よろしくお願いいたします。

Aベストアンサー

ThisWorkbookのモジュールに以下でよろしいのではないかと・・・。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call (実行したいプロシージャ)
End Sub

QExcel保存時に任意セル値をファイルのプロパティと別ファイルに転記するマクロは?

会社でExcelのテンプレートから見積書を作成して、保存した後、ファイルのプロパティと、別に作成している「見積書データベース」ファイルに転記しているんですが、時間がかかるので、自動化出来ないか悩んでいます

理想はファイルの保存時に自動的に転記することなんですが

1、ファイルのプロパティの概要タブの中の「タイトル」、「表題」、「カテゴリ」、「コメント」の中に任意セルの値を転記

2、別に作成している「見積書データベース」ファイルの各項目に任意セルの値を転記

この2つが出来るようなマクロ、もしくはエクセルの機能は無いでしょうか?

Aベストアンサー

こんばんは。

#1のzap35さんのアドバイスを、この私が繰り返してもしょうがないのですが、

>あらかじめ用意している見積書のテンプレートファイルを開き、1つの見積を1つのファイルにして、1つのフォルダに保存していきます。

マクロのコードを書くというのは、ちょうど、車で目的の場所に行く道順を描くようなものだと思います。

今は、お買い物リストを渡されて、自宅に帰りたいと言われているだけのような気がしています。

zap35さんの「マクロを掲載して、どう直せばよいか再度質問されたらいかがでしょうか」という意味は、道順の個々の中継地や目的地を知るうえの材料になるからで、マクロが完全に出来るというものとは違います。また、「プロパテイ」に関しては、単なるドアの開け方であって、それ自体が重要なのではありません。

回答者さんたちは、技術はあっても、知らない土地にいると思ってください。そのためには個々の場所や地名の情報が必要です。プライバシや機密の問題があって、それは仮の名前でもよいのです。もう少し、相手の事情を理解してください。サンプルを書くのがやぶさかではないのですが、それは無駄な繰り返しになる可能性が強いからです。

このようなことを書くのは、決して本意ではありませんが、何とかしてあげたくても、今は、どうにも出来ないのです。お分かりください。

こんばんは。

#1のzap35さんのアドバイスを、この私が繰り返してもしょうがないのですが、

>あらかじめ用意している見積書のテンプレートファイルを開き、1つの見積を1つのファイルにして、1つのフォルダに保存していきます。

マクロのコードを書くというのは、ちょうど、車で目的の場所に行く道順を描くようなものだと思います。

今は、お買い物リストを渡されて、自宅に帰りたいと言われているだけのような気がしています。

zap35さんの「マクロを掲載して、どう直せばよいか再度質問されたらい...続きを読む


人気Q&Aランキング

おすすめ情報