いきさつ
家計簿77.xlsm、2024年分を作ろうとメニューから[翌年分ブック作成]をクリックしたら‥‥
「次の機能はマクロなしのブックに保存できません」が出て失敗した。
原因は直ぐに分かった。拡張子を xlsx から xlsm(マクロ有効ブック)に変えたからだ。
が、改修の方法が判らない‥‥ ので、ChatGPT *1 に尋ねた。
ChatGPTからの答え
- Q:You
Excel VBAで名前付きの新しいxlsmファイルを作成するには- A:
Sub CreateNamedXLSMWorkbook()ここで FileFormat:=52 は .xlsm 形式を指定しています。この番号は、Excel ファイル形式のコードで、.xlsm のコードが 52 です。
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
ファイルのパスや名前は適切に指定する必要があります。C:\Path\To\Your\File\YourFileName.xlsm の部分を適切なファイルパスとファイル名に変更してください。
具体的には
エラーの出た Functionを下記のようにした。(ポイントのみ)
- Function 翌年分ブック作成() の
- Workbooks.Add '新規作成 の次に
- 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(文章生成モデル)