質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

解決済

実行するとExcelが終了してしまう

lovelywolf
lovelywolf

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

1回答

0グッド

0クリップ

35406閲覧

投稿2019/07/25 02:00

編集2019/07/25 03:43

他ブックを開きコピーして自ブックへ貼付けるマクロを作成しました。
上記マクロはシート上に配置したボタン(オブジェクト)で実行するようにしています。

【症状】
ボタンからマクロを実行するとExcelが勝手に終了してしまう。

【試したこと】
・原因を探ろうとF8でステップ実行すると正常に終了する。
・F5で実行しても正常に終了する。
・手作業でのコピペでも問題なし。
・シート上のボタンを削除し、作り直してもExcelが勝手に終了してしまう。

【追記】
Workbooks(strFiles).Close False: DoEvents
をコメントアウトしてボタンから実行したところ、正常に終了。
試しに1行上にブレイクポイントを設定して再実行し
strFilesの中身を確認。strFilesにはコピー元として開いた
ファイルのファイル名が入っていました。

開いたファイルが開きっぱなしは困るので、閉じてから処理を終了したいです。
よろしくお願いいたします。

なぜ落ちてしまうのか、落ちないようにするにはどうすれば良いのかを
ご教示いただけると助かります。よろしくお願いします。

Win10、Excel2016、自ブック1,724KB、コピー元他ブック90KB

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Dim sht As Worksheet, rg As Range, strFolder As String, strFiles As String, n As String, errArea As String Sub ③import_pbc() errArea = "" If Application.Range("rng.importflag").Value = "加工済" Then If import_pbc0(errArea) = False Then GoTo errMsg If import_pbc1(errArea) = False Then GoTo errMsg Else If import_pbc0(errArea) = False Then GoTo errMsg End If MsgBox "終わりました(嬉〃∀〃)ゞ": Exit Sub errMsg: MsgBox "【処理エラー】" & vbCrLf & "番号:" & Err.Number & "(Area:" & errNum & ")" & vbCrLf & "メッセージ:" & Err.Description End Sub Function import_pbc0(ByRef errArea As String) As Boolean On Error GoTo errHand Set sht = ThisWorkbook.Sheets("pbc_0") If Application.Range("rng.importflag").Value = "加工済" Then flg = 0: sht.UsedRange.ClearContents If Application.Range("rng.importflag").Value <> "加工済" Then flg = 1 strFolder = Application.Range("rng.folderPBC_0").Value strFiles = Application.Range("rng.filesPBC_0").Value If flg = 0 Then Set rg = sht.Range("A1") If flg = 1 Then Set rg = sht.Cells(Rows.Count, 1).End(xlUp).Offset(2) If func_import(sht, rg, strFolder, strFiles, errArea) = False Then GoTo errHand Sleep 1000: DoEvents import_pbc0 = True: Exit Function errHand: Sleep 1000: DoEvents import_pbc0 = False: If errArea <> "func_import" Then errArea = "import_pbc0" End Function Function import_pbc1(ByRef errArea As String) As Boolean On Error GoTo errHand Set sht = ThisWorkbook.Sheets("pbc_1") strFolder = Application.Range("rng.folderPBC_1").Value strFiles = Application.Range("rng.filesPBC_1").Value Set rg = sht.Range("A1") If func_import(sht, rg, strFolder, strFiles, errArea) = False Then GoTo errHand Sleep 1000: DoEvents import_pbc1 = True: Exit Function errHand: Sleep 1000: DoEvents import_pbc1 = False: If errArea <> "func_import" Then errArea = "import_pbc1" End Function Function func_import(sht, rg, strFolder, strFiles, ByRef errArea As String) As Boolean Call Application制御_False On Error GoTo errHand cnt = WorksheetFunction.Max(sht.Columns(1)) + 1 Workbooks.Open strFolder & strFiles, False With Workbooks(strFiles).Sheets(1) .Cells.EntireColumn.Hidden = False: .Cells.EntireRow.Hidden = False: .UsedRange.AutoFilter .UsedRange.Copy End With rg.PasteSpecial xlPasteFormats: rg.PasteSpecial xlPasteValues: Application.CutCopyMode = False Workbooks(strFiles).Close False: DoEvents With sht If sht.Name <> "pbc_1" Then .Range(rg.Offset(1), .Cells(Rows.Count, 1).End(xlUp)).Value = cnt .Cells.Font.Name = "Meiryo UI": .Cells.Font.Size = 9 End With Set sht = Nothing: DoEvents Call Application制御_True: func_import = True: Exit Function errHand: Call Application制御_True: func_import = False: errArea = "func_import" End Function Sub Application制御_False() Application.ScreenUpdating = False Application.DisplayAlerts = False Application.EnableEvents = False Application.Calculation = xlCalculationManual Application.Cursor = xlWait End Sub Sub Application制御_True() Application.ScreenUpdating = True Application.DisplayAlerts = True Application.EnableEvents = True Application.Calculation = xlCalculationAutomatic Application.Cursor = xlDefault Application.CutCopyMode = False End Sub

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

m.ts10806

2019/07/25 02:22

「落ちる」ってどうなるのでしょうか。
nanami12

2019/07/25 02:36

処理は完了して、エクセルが勝手に終了するのでしょうか? それとも処理を完了せず、エクセルが終了するのでしょうか? どちらでしょう?
lovelywolf

2019/07/25 02:44

>「落ちる」ってどうなるのでしょうか。 エクセルが勝手に終了してしまうことです。 わかりづらい表現ですみません。 >どちらでしょう? 開きなおすと実行前に戻ってしまっています。 試しにThisworkbook.Saveを随所に仕込んでみましたが 実行前の状態のままでした。 ということは、完了せずに終了してしまっている...という理解でよさそうな感じがします。
m.ts10806

2019/07/25 02:45

>Workbooks(strFiles).Close False: DoEvents 上記のCloseがきいてるとかではないですか?
m.ts10806

2019/07/25 02:46

質問を編集して状況追記ください。

回答1

0

自己解決

Workbooks(strFiles).Close False: DoEvents

DoEvents: Workbooks(strFiles).Close False
に入れ替えて実行したところ、問題なく処理を終了できました。

ヒントをいただけてたすかりました。
本当にありがとうございました。

投稿2019/07/25 04:05

lovelywolf

総合スコア7

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。