[[20161014152530]] 『マクロの入ったブックをコピー』(ss) ページの最後に飛ぶ

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

 

『マクロの入ったブックをコピー』(ss)

マクロの入ったブックをコピーして使いたいんですが、マクロまでコピーしてくれません。何か設定が必要でしょうか?教えて下さい。

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


 どのようにしてコピーを行ったのか、その手順を具体的に書いてくれ。
(ねむねむ) 2016/10/14(金) 15:27

ブックをコピーしたならば、全て引き継がれているはずです。そうでないというならば、シートのコピーを行ったのでしょうか?

標準モジュールとかクラスモジュールに書いたマクロは、シートをコピーしても引き継がれませんよ。
「ファイルのエクスポート」でテキストファイルで書き出しておき、コピー先で「ファイルのインポート」しましょう。

または、コードをシートモジュールに書いておけば、シートのコピーと共にマクロもコピーされます。
(???) 2016/10/14(金) 15:33


ねむねむ様
すみません。大事な文章をコピペし漏らしていました。

保存をかけて、保存したファイルを開くとマクロが消えてしまいます。
ファイル→名前を付けて保存ではなく、コマンドボタンで保存をしています。
コードを貼り付けます。

Sub SaveAsThisExcelFile()

    Dim 管理番号        As String
    Dim SavePath    As String
    Dim MSG         As String
    Dim Icon        As Long

    Call ISY_Setting

    On Error GoTo Err2

    管理番号 = Mid(ISY管理番号Rng.Value, 8, 3) & Right(ISY管理番号Rng.Value, 5)

    With ThisWorkbook

        SavePath = .Path & "\" & ISYStationRng.Value & "(" & 管理番号 & ").xlsx"

    End With

    If Not Dir(SavePath) = Empty Then

        MSG = "上書きでファイルを保存しますか?"
        Icon = vbExclamation + vbYesNo

    Else

        MSG = "ファイルを保存しますか?"
        Icon = vbInformation + vbYesNo

    End If

    If MsgBox(MSG & vbLf & vbLf & SavePath, Icon, Title) = vbNo Then

        MsgBox "保存を中止しました。", vbInformation, Title
        End

    End If

    Sheets("シート1").Buttons.Delete

    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs SavePath, xlOpenXMLWorkbook
    Application.DisplayAlerts = True

    MsgBox "保存が完了しました。", vbInformation, Title

Res:

    On Error GoTo 0

    End

Err2:

    MsgBox "以下のエラーが発生しました。処理を中止します。" & vbLf & vbLf & _
            Err.Description, vbCritical, Title

    Resume Res

End Sub

保存するときに、xlsxと指定しているのがまずいのではないかと思っているのですが、
拡張子を指定せずに保存することは可能でしょうか。
(ss) 2016/10/14(金) 15:37


 拡張子無しで当該ブックを別名保存する場合には当該ブックと同じ拡張子になると思うが。

 でマクロがあるということは当該ブックの拡張子はxlsmのはずなのでxlsmで保存され、マクロも削除されないと思うが。
(ねむねむ) 2016/10/14(金) 16:12

>保存するときに、xlsxと指定しているのがまずいのではないかと思っているのですが、
>拡張子を指定せずに保存することは可能でしょうか。
拡張子が「xlsm」のマクロ有効ブックで保存しないと、
マクロ消えますね。
(まっつわん) 2016/10/14(金) 16:29

ねむねむ様 まっつわん様
xlsmで保存されず、エラーが起こります。
xlsmと指定してもエラーが起こります。
エラー:この拡張子は、選択したファイル形式には使用できません。「ファイル名」ボックスでファイル拡張子を変更するか、「ファイルの種類」ボックスで別のファイル形式を選択してください。

形式を指定してもエラーが起きてしまいます。
FileFormat:=52にすると、
エラー:その名前つき引数は既に使用されています。

(ss) 2016/10/14(金) 16:55


 マクロが記述されているブックの拡張子は何か?

 もしXLSXのブックにマクロを作成しているのであればいったんそれをXLSMで保存してみてくれ。

(ねむねむ) 2016/10/14(金) 17:05


ねむねむ様

xlsmで保存していますがエラーが出てしまうようです・・・。
(ss) 2016/10/14(金) 18:39


 とりあえず

 >>FileFormat:=52にすると、 
 >>エラー:その名前つき引数は既に使用されています。

 もし、ThisWorkbook.SaveAs SavePath, xlOpenXMLWorkbook,FileFormat:=52

 と記述したなら、当然エラーです。
 最初の2つ、定位置パラメータ記述方式ですが 最初のSavePathが FileName、次のxlOpenXMLWorkbookがFileFormat。
 したがって、これをキーワード記述方式にすると

 ThisWorkbook.SaveAs FileName:=SavePath, FileFormat:=xlOpenXMLWorkbook,FileFormat:=52

 こうなってしまいますから。

(β) 2016/10/14(金) 18:48


 >>拡張子を指定せずに保存することは可能でしょうか。 

 なぜ、指定したくないのですか? 指定すればいいのでは??

 ブックを、マクロ有効ブックとして名前を付けて保存、この操作をマクロ記録すると

 FileName:="hogehoge・・・・hogehoge.xlsm"  になりますし、FileFormat:=xlOpenXMLWorkbookMacroEnabled になります。

 なぜ、こういったコードにしないのでしょうか?

(β) 2016/10/14(金) 18:53


 あと、この形(SaveAs) でもいいのかもしれませんが、この後、エクセル区画には元のブックではなく、新しく
 名前を付けて保存されたマクロブックが残ることになり、以降のマクロ処理は、その新しいマクロブックのマクロとして
 実行されます。

 あくまで、エクセル区画のマクロブックが、そのまま最後まで存在して制御する。
 そのコピーを別途の名前で保存したいのであれば SaveCopyAs も検討されてはいかがでしょう。

(β) 2016/10/14(金) 18:59


コメント返信:

[ 一覧(最新更新順) ]


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