前提・実現したいこと
アンケートシートにシートの「送付」ボタンを設置しボタンクリックすると、アンケート集約ブックへアンケートシートをコピーするマクロを作成しました。この動作は1回目は確実に成功するのですが、2回目を実行すると処理途中でブックが落ちてしまいます。
発生している問題・エラーメッセージ
エラーメッセージは出ずにマクロが落ちる。(スタックオーバーフローでも発生したかのようだ・・・)
該当のソースコード
VBA
1Sub アンケート回答() 2'集約ブックへのシートのコピー追加は同じタイミングの場合は読み取りになる場合は終了する 3'このブックをコピーして以下の名前で保存する 4'QA_未登録_yyyymmdd_hhmmss 5'正常にオープンできたらシート追加作業を行う 6'集約ブックがあるフォルダに未登録のブックがあったらそのブックもオープンしてシート追加を行う 7'対象ブックのブック名をQA_登録済_yyyymmdd_hhmmssに書き換える 8'集約ブックを保存する 9 10Dim bkFullPath As String 11Dim folderPath As String 12Dim bkName As String 13Dim WS As Worksheet 14Set WS = ActiveSheet 15 16If WS.Cells(1, 9) = "" Then 17Else 18 MsgBox "すでにアンケート結果を送付しているので送付できません" & vbLf & _ 19 "送付日時:" & Format(WS.Cells(1, 9).Value, "yyyy/mm/dd hh:mm:ss") 20 Exit Sub 21End If 22 23Application.ScreenUpdating = False 24folderPath = ThisWorkbook.Path & "\" & "アンケート集約フォルダ" 25bkName = "アンケート集約ブック.xlsx" 26If folderPath = "" Then 27 bkFullPath = ThisWorkbook.Path & "\" & bkName 28Else 29 bkFullPath = folderPath & "\" & bkName 30End If 31Dim WB As Workbook 32Call BookOpen(WB, bkFullPath) 33If WB Is Nothing Then 34 GoTo Finally 35End If 36Dim cnt As Long 'コピー先ブックのシートの枚数 37'cnt = WB.Sheets.Count 38WS.Copy before:=WB.Sheets(1) 39Dim TS As Worksheet 40Set TS = ActiveSheet 41'TS.Name = Left(TS.Name, 5) & Format(Now, "_hhmmss") 42TS.Buttons.Delete 43'Call マクロボタンのキック先削除(TS) 44Call 未登録ブックの取り込み(folderPath, WB) 45'Application.DisplayAlerts = False 46WB.Save 47WB.Close 48Set WB = Nothing 49'Application.DisplayAlerts = True 50Application.ScreenUpdating = True 51Finally: 52 WS.Cells(1, 9) = Now 53 ThisWorkbook.Save 54 MsgBox "アンケート結果の送付が終了しました!" 55End Sub 56 57Sub BookOpen(WB As Workbook, bkFullPath As String) 58 Dim buf As String 59 60 'ファイルの存在チェック 61 buf = Dir(bkFullPath) 62 If buf = "" Then 63 MsgBox bkFullPath & vbCrLf & "は存在しません", vbExclamation 64 Exit Sub 65 End If 66 67 '同名ブックのチェック 68 For Each WB In Workbooks 69 If WB.Name = buf Then 70 MsgBox buf & vbCrLf & "はすでに開いています", vbExclamation 71 Exit Sub 72 End If 73 Next WB 74 75 'ここでブックを開く 76 If AlreadyOpenCheck(bkFullPath) Then 77 'MsgBox bkFullPath & vbLf & "は他の誰かが既に開いています。", vbExclamation 78 Dim folderPath As String 79 folderPath = Left(bkFullPath, InStrRev(bkFullPath, "\")) 80 ThisWorkbook.SaveCopyAs folderPath & "QA_未登録_" & Format(Now, "yyyymmdd_hhmmss") & ".xlsx" 81 Else 82 Set WB = Workbooks.Open(bkFullPath) 83 End If 84 85End Sub 86 87Function AlreadyOpenCheck(bkFullPath As String) As Boolean 88 On Error Resume Next 89 Open bkFullPath For Append As #1 90 Close #1 91 If Err.Number > 0 Then 92 AlreadyOpenCheck = True 93 Else 94 AlreadyOpenCheck = False 95 End If 96End Function 97 98Sub 未登録ブックの取り込み(folderPath, WB) 99Dim buf As String 100Dim QA As Workbook 101buf = Dir(folderPath & "\" & "QA_未登録_*.xlsx") 102 103Do While buf <> "" 104 105Set QA = Workbooks.Open(folderPath & "\" & buf) 106QA.Sheets(1).Copy before:=WB.Sheets(1) 107Application.DisplayAlerts = False 108Workbooks(buf).Close 109Application.DisplayAlerts = True 110 111buf = Dir() 112Loop 113 114End Sub 115 116
試したこと
色々やって分かったことはブックのファイル名がちがったり、フォルダが違う場所から同じブックを実行する場合ならば落ちる現象は生じていません。
1.アンケートブックをコピーして2つ用意する。
2.アンケート1.xlsm で アンケート集約ブック.xlsxに「アンケート」シートをコピー追加 成功
3.アンケート2.xlsm で アンケート集約ブック.xlsxに「アンケート」シートをコピー追加 成功
4.アンケート1.xlsm で アンケート集約ブック.xlsxに「アンケート」シートをコピー追加 成功
5.アンケート2.xlsm で アンケート集約ブック.xlsxに「アンケート」シートをコピー追加 成功
6.アンケート2.xlsm で アンケート集約ブック.xlsxに「アンケート」シートをコピー追加 失敗
➡ マクロ実行中にEXCEL自体が落ちる
補足情報(FW/ツールのバージョンなど)
Window10 64ビット バージョン 1903
OS 名: Microsoft Windows 10 Home
OS バージョン: 10.0.18362 N/A ビルド 18362
OS 製造元: Microsoft Corporation
OS 構成: スタンドアロン ワークステーション
Microsoft Excel 2016 MSO(16.0.13901.20366) 32ビット
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。