重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【解消】通知が届かない不具合について

Excel2003、2007で実行した場合は正常終了するが
Excel2010で実行するとVBA終了時に強制終了します。

処理は、マクロありブックからマクロなしブックを作成するために、
新規ブックを作成しマクロありブックからシートを移動する処理です。
VBA起動は、フォームコントロールから行っています。
VBA終了時に(End Sub)後にEXCELがなぜか強制終了します。
(Microsoft Excel は動作を停止しました。のメッセージが表示される)

なお、
・フォームコントロールから実行した場合はEXCELが強制終了し、
  デバックモードで実行した場合は強制終了しません。
 ・マクロありファイルの種類:Excel 97-2003ブック
 ・★★★のソースが含まれていると、Excelが強制終了します。

以下、ソース。

Sub ファイル保存()
  'マクロなしファイルを作成
CreateNoMacroBook
End Sub '←ここで異常終了が発生する。

Sub CreateNoMacroBook()

Dim fname As String
Dim ns As Integer
Dim cnt As Integer
Dim i As Integer
'マクロありブックの名前を取得
fname = ActiveWorkbook.Name
'マクロありブックのシート数を取得
cnt = ActiveWorkbook.Worksheets.Count
'すべてのシートをMoveするとエラーになるのでシートを追加
Worksheets.Add After:=Worksheets(Worksheets.Count)
'新規ブック作成時のデフォルトのシート数を保管
ns = Application.SheetsInNewWorkbook
'新規ブック作成時のシート数を変更
Application.SheetsInNewWorkbook = 1
'新規ブック作成
Workbooks.Add
'新規ブック作成時のデフォルトのシート数に戻す
Application.SheetsInNewWorkbook = ns
'マクロありブックのシートを新規ブックの"Sheet1"シートの前に移動
For i = 1 To cnt
Workbooks(fname).Worksheets(1).Move Before:=Workbooks(Workbooks.Count).Worksheets("Sheet1")  '★★★
Next i
'表示用に新規ブックの一枚目のシートをアクティブにする
Workbooks(Workbooks.Count).Worksheets(1).Activate
Application.DisplayAlerts = False '新規ブックのデフォルトシート"Sheet1"を削除する
Workbooks(Workbooks.Count).Worksheets("Sheet1").Delete
Workbooks(Workbooks.Count).Activate
Application.DisplayAlerts = True

End Sub

A 回答 (1件)

 Bookには最低1つのシートが残っていないといけないので


ここでエラーになりそうな気がしますが、エラーにならないのでしょうか。
For i = 1 To cnt
Workbooks(fname).Worksheets(1).Move

Moveではなくコピーならエラーにならないはずです。

この回答への補足

ありがとうございます。コピーだとうまくいきました。
ただWorksheets.Add After:=Worksheets(Worksheets.Count)
この処理でシート追加しているので原因をその後も調査していました。
その結果、ソースは変更せずofficeをアップデートすることで解決しました。

補足日時:2013/07/30 21:15
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2013/07/30 21:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!