[[20190404155910]] 『xlsm形式で出力保存されたファイルを再編集したい』(pon) ページの最後に飛ぶ

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

 

『xlsm形式で出力保存されたファイルを再編集したい』(pon)

プロジェクトに関連する会社に条件等を記載し、送付するファイル(仮ファイル名:「書類作成ファイル.xlsm」)を扱っています。
条件の明示方法は、項目が列挙された書式に対してチェックボックスを使用する仕様です。
但し、エクセル標準搭載のチェックボックスが今ひとつ見えにくいため、小さい正方形をチェックボックスと見立て、図形を塗りつぶす/透明にするというマクロを登録させて使っています。
書類の左上にプロジェクトに関連する会社名をプルダウンで選択するセルがあり、チェックボックスを操作し、ボタンマクロにてPDFで「会社名_書類名.pdf」でカレントフォルダに保存するというファイルですが、PDF保存だと修正が効かない為、「会社名_書類名.xlsm」も同時に出力させたいと思っています。
「書類作成ファイル.xlsm」は、複数のシートに各種書類があり、イメージとしては下記の通りです。

1.アクティブシートを新規ブックにコピー
2.「会社名_書類名.xlsm」のファイル名でカレントフォルダに新規保存
会社名、書類名はRangeで取得し(それぞれ仮に("A1")、("C3")とします)、出力保存されたファイルは開かれる必要はありません。

というより、とりあえずここまではできました(但し、エラー:1004が表示されるので、この点についても改善したいです)。
一番の問題はここからなのですが、作成した「会社名_書類名.xlsm」ファイルに修正を加えたい時、チェックボックスを操作するマクロの登録先が「書類作成ファイル.xlsm」となっているため、「会社名_書類名.xlsm」を別フォルダに移動すると、マクロの参照先が見つからずにエラーとなってしまいます。

いずれもシートモジュールに記載したマクロなのですが、「(会社名)_書類名.xlsm」を再編集する際、マクロの参照先を当該ファイル自身にて操作するためにお教え頂けますようお願い致します。

チェックボックスに見立てた小さな正方形のオブジェクトには下記マクロを登録させています。

Sub checkbox()

     With ActiveSheet.Shapes(Application.Caller)
      If .Fill.Visible = msoFalse Then
         .Fill.Visible = msoTrue
        .Fill.ForeColor.SchemeColor = 0
      Else
        .Fill.Visible = msoFalse
     End If
     End With
End Sub

以上、宜しくお願い致します。

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


 元のエクセルファイルを、マクロ有効テンプレートファイル(拡張子.xltm)
 にしちゃえば、楽じゃないでしょうか。

 テンプレートファイルを開けば、開き方に関わらず新規ブックができて、
 登録されたマクロもその新規ブックのマクロを参照してくれます。
(でれすけ) 2019/04/04(木) 16:25

ご返答ありがとうございます。
.xltmの理解がこれまでないため誤った理解かもしれませんが、今調べた限りですと他のシートとの兼ね合いを考えた際に、書類作成ファイルをテンプレート化するのは用途に合わないようです。

そのシートだけ取り出せば良いのでは、となるかもしれませんが、全てのシートが最終的に集約されるシートが有り、あくまでも一つのファイル内で書類の出力保存をする、誤って出力保存した際は当該ファイルにて修正をする、という形にしたいと思っています。

(pon) 2019/04/04(木) 16:43


 そーですか
 どんな風に理解しているのか分かりませんので、
 それが違っているかどうかも私には分かりません。

 では、シートをコピーするときに、シェープに登録されているマクロの参照先を
 全部変更するのがいいかもですね。
 こんな感じで

 Sub ShCopy()

   Dim wb As Workbook

   ThisWorkbook.Worksheets(1).Copy
   Set wb = ActiveWorkbook
   wb.SaveAs "新しいブック.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
   For Each sh In wb.Worksheets(1).Shapes
       sh.OnAction = Replace(sh.OnAction, ThisWorkbook.Name, wb.Name)
   Next

 End Sub
(でれすけ) 2019/04/04(木) 17:16

ありがとうございます。
使わせていただきます。
(pon) 2019/04/04(木) 17:28

コメント返信:

[ 一覧(最新更新順) ]


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