###前提・実現したいこと
エクセルマクロを使い標準モジュールから親フォームを表示させ、親フォームでは子フォームに表示する詳細データを選択させて編集後に子フォームを表示しております。
尚、子フォームは60情報/ページで二ページ構えております。
しかし約10回に1回は子フォームを表示させた直後に標記のエラーで異常終了してしまいます。
再起動後にダウンしやすいとかの傾向はつかめませんでした。
このエラーを回避する方法を教えてください、初心者ですのでわかりやすく表現していただくようお願いいたします。
###発生している問題・エラーメッセージ
エラーが発生しました
エラー番号:-2147417848
エラーの種類:オートメーションエラーです。
起動されたオブジェクトはクライアントから切断されました。
###該当のソースコード
エクセルVBA
Private Sub CommandButton1_Click()
'親フォームの実行釦で起動される。
'複写フォームにMKK/ATY KOP/ATY 035/9BCBの初期フォームを作成する
'OP釦で選択されているシートの検番を子フォームおよび子次頁フォームに表示する
''Debug.Print "i="; 削除シート
Application.ScreenUpdating = False Application.DisplayAlerts = False On Error GoTo er For i = 1 To 6 If Me.Controls("OptionButton" & i) = True And _ 親フォーム.Controls("Label" & 4 + i).Caption <> "" Then GoTo p1 Next i MsgBox "シートが選択されておりません" Exit Sub
p1:
'複写FのMKK・ATY KOP・ATY 035・9BCBのフォームを初期化する
If Worksheets("条件").Visible = False Then Worksheets("条件").Visible = True
Sheets("条件").Select
Range("an:ao").Delete 'フォームで使用するエクセルの行数と検番
Range("an1") = "行数"
Range("ao1") = "検番"
Range("r3:ab19").Select 'MKKフォーム
Selection.Copy
Sheets("複写F").Select
Range("a3,a21, a40,A58").Select
ActiveSheet.Paste 'MKKフォーム初期化する
Sheets("条件").Select
Range("AD3:AH26").Select
Selection.Copy
Sheets("複写F").Select
Range("M2").Select 'aty kop
ActiveSheet.Paste
Sheets("条件").Select
Range("AD29:AG43").Select
Selection.Copy
Sheets("複写F").Select
Range("M40,M55").Select 'バーコードチェック
ActiveSheet.Paste
Sheets("条件").Select
Range("AD46:AG77").Select
Selection.Copy
Sheets("複写F").Select
Range("S2").Select 'aty 035
ActiveSheet.Paste
Range("s40:s69").ClearContents
Range("A1").Select
Sheets("条件").Select
Application.CutCopyMode = False
ActiveWindow.SelectedSheets.Visible = False
シート名 = 親フォーム.Controls("Label" & 4 + i).Caption If Worksheets("完待ち" & シート名).Visible = False Then Worksheets("完待ち" & シート名).Visible = True Sheets("完待ち" & シート名).Select If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False 'オートフィルタを解除する Range("a1").AutoFilter Field:=32, Criteria1:="<>" & Worksheets("メイン").Range("b25") 'jup発行番号以外 ActiveSheet.Range("a1").AutoFilter Field:=10, Criteria1:="<5" '等級は5級より小さい ActiveSheet.Range("a1").AutoFilter Field:=5, Criteria1:="<>無" 'カード無し以外 ActiveSheet.Range("a1").AutoFilter Field:=6, Criteria1:="<>◎" '入力済み以外 n数 = Range("a1").CurrentRegion.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1 If n数 = 0 Then MsgBox "完了入力待ちの明細はありません。" Worksheets("完待ち" & シート名).Visible = False Sheets("メイン").Select Range("n9").Select Exit Sub End If If n数 >= 121 Then MsgBox "データ数が120件を超えたので120件で打ち切りました" n数 = 120 End If ReDim gyou(n数) 'フィルター後のエクセルが持つ行数を格納する i = 1 '1番上をフィールド名(項目行)だとしたら Set Rng = Range("d2", Range("d2").End(xlDown)).SpecialCells(xlCellTypeVisible) For Each c In Rng.Cells If c = "" Then Exit For If i = 121 Then Exit For If c.Row <> 1 Then Sheets("条件").Cells(i + 1, 40) = c.Row '可視セルの行番号を格納する Sheets("条件").Cells(i + 1, 41) = Cells(c.Row, 4) '検番格納 gyou(i) = c.Row i = i + 1 End If Next For i = 1 To n数 Select Case i Case Is <= 60 新子フォーム.Controls("Label" & i).Caption = Cells(gyou(i), 4) Case Is >= 61 新子次頁フォーム.Controls("Label" & i - 60).Caption = Cells(gyou(i), 4) End Select Next i If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False 'オートフィルタを解除する 新子フォーム.Label142.Caption = n数 新子フォーム.Caption = "完待ち" & シート名 Unload Me '親フォームを閉じる 新子フォーム.Show '⇒新子フォームが表示された後にエラーとなります! Exit Sub '子フォームからここに戻ります
er: msg = "親フォーム内でエラー発生!担当者に連絡して下さい。"
End Sub
###試したこと
初心者ですのでありません。
親フォームを表示する前に全てのエクセルファイルの上書きを行ってとりあえずの対策としております。
###補足情報(言語/FW/ツール等のバージョンなど)
このソフトは自宅のエクセル2016や会社のエクセル2007で開発しました。
最近、会社はエクセル2010に更新されました。感覚的にですがエラー発生頻度が多くなった感じは受けております。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/12 05:26
2017/10/15 04:43
2017/10/15 23:39
2017/10/17 11:09
2017/10/18 01:56