まりふのひと

家計簿77をマクロ有効ブックに変更したため[翌年分ブック作成]が出来なかったが改修できた


いきさつ

 家計簿77.xlsm、2024年分を作ろうとメニューから[翌年分ブック作成]をクリックしたら‥‥

「次の機能はマクロなしのブックに保存できません」が出て失敗した。
原因は直ぐに分かった。拡張子を xlsx から xlsm(マクロ有効ブック)に変えたからだ。
が、改修の方法が判らない‥‥ ので、ChatGPT *1 に尋ねた。

ChatGPTからの答え

  • Q:You
    Excel VBAで名前付きの新しいxlsmファイルを作成するには
  • A:
    Sub CreateNamedXLSMWorkbook()
      Dim newWorkbook As Workbook
      Set newWorkbook = Workbooks.Add

      ' 新しいブックに名前を付けて保存(.xlsm 形式)
      newWorkbook.SaveAs "C:\Path\To\Your\File\YourFileName.xlsm", FileFormat:=52

      ' または、新しいブックに名前を付けずに保存する場合
      ' newWorkbook.Save

      ' 新しいブックを閉じる(保存しない場合はコメントアウトまたは削除してください)
      ' newWorkbook.Close
    End Sub
    ここで FileFormat:=52 は .xlsm 形式を指定しています。この番号は、Excel ファイル形式のコードで、.xlsm のコードが 52 です。
    ファイルのパスや名前は適切に指定する必要があります。C:\Path\To\Your\File\YourFileName.xlsm の部分を適切なファイルパスとファイル名に変更してください。

具体的には

 エラーの出た Functionを下記のようにした。(ポイントのみ)

  • Function 翌年分ブック作成() の
    1. Workbooks.Add  '新規作成 の次に
    2. ActiveWorkbook.SaveAs strPath & "\" & newFileName, FileFormat:=52  'を追加した。

 上記以外に細かな修正はあったが、正常に動作することを確認した。

家計簿77.xlsx を .xlsm(マクロ有効ブック)に変更した背景

 家計簿.xlsx を .xlsm()マクロ有効ブック に変更したのは、収支シートに下記コードを入力したため。

01.Private Sub Worksheet_SelectionChange(ByVal Target As Range)
02.Dim r As Long
03.
04.    'O列がアクティブになったら、次の行のB列をアクティブにする。
05.  If Target.Column = 15 Then   'O列
06.    r = ActiveCell.Row
07.    Cells(r + 1, 2).Activate
08.  End If
09.
10.End Sub

  • 動作説明:O列(備考の右)にカーソルが来たら、次の行のB列(日付)にカーソルを移す。
  • 目的:セルのロック/シート保護を行わなくてもカーソルを次の行の任意の列に移せる ため。


*1:正式名称:Chat Generative Pre-trained Transformer(文章生成モデル)