作成画面
前回作成「名前を付けて保存ダイアログボックス」を開くコードにバグがあったので修正したください。
Public Function MySaveFileName() As String
Dim sgetfile As String
sgetfile = Application.GetSaveAsFilename(fileFilter:="エクセルファイル (*.xls), *.xls")
If sgetfile = "False" Then
MySaveFileName = ""
Else
MySaveFileName = sgetfile
End If
End Function
バグ発生予防の為、先頭に下記のVBAコードを追加してください。
Option Explicit
これを入力しておくと、宣言されていない変数を使うとエラーになるのでバグを予防できます。
■新規ブックを作成し列単位で請求書をコピーしました
Private Sub CommandButton2_Click()
Dim sSaveFile As String
Dim sNewBook As String
sSaveFile = MySaveFileName
If sSaveFile = "" Then
Exit Sub
End If
Worksheets("請求書").Columns("D:Z").Copy
Workbooks.Add
sNewBook = ActiveWorkbook.Name
Workbooks(sNewBook).Activate
Worksheets("Sheet1").Columns("D:Z").PasteSpecial
End Sub
■実行ソフトの流れ
1)名前を付けて保存ダイアログボックスを開き、ファイル名が入力されれば続行し、キャンセルされればコマンドボタンクリックイベントから抜けます。
2)請求書部分を列単位でコピーします。
3)新規ブックを作成します。
4)作成した新規ブックの名前を取得します。
5)新規ブックをアクティブにします。 これは新規作成された時点でアクティブになるので、必要ないかもしれませんが、せっかく作成した請求書がダメになるとイヤなので、念のため追加しました。
6)新規ブックの「Sheet1」の請求書を列単位で貼り付けます。
実行結果です。
結果、下記の点が分かりました。
・コマンドボタンはコピーされていません。
・計算式と関数がコピーされエラーになっています。
・列幅は正常ですが、行幅は合っていません。
次回より、正しく請求書がコピーされファイル保存されるように修正します。