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

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

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

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

オートメーション

オートメーションとは、反復の多いタスクまたは正確性や過程が多いタスクを、人間がかかわることなく、コンピューターに任せて自動化させる事を指します。

Q&A

解決済

1回答

16197閲覧

数列の複製をするVBAマクロで 実行時エラー'-2147417848(80010108)':が発生 直前に入力規則のあるセルを直前に触った場合に発生します

101

総合スコア9

VBA

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

オートメーション

オートメーションとは、反復の多いタスクまたは正確性や過程が多いタスクを、人間がかかわることなく、コンピューターに任せて自動化させる事を指します。

0グッド

0クリップ

投稿2017/07/12 07:04

編集2017/07/12 08:32

###前提・実現したいこと

エクセルVBAにて、数列の複製をするマクロを作成しましたが、下記の問題が解決できず困っています。

下記のマクロを動かすと、エラーが発生する場合があります。大容量のシートの場合に下記のエラーが発生します。
入力規則のあるセルを直前に触り、値を入力した後にマクロを起動した場合に発生するようです。

###発生している問題・エラーメッセージ

.Range(.Columns(第一列左列 + 一台列数 * 繰返し数 + 1), .Columns(第一列左列 + 一台列数 * 繰返し数 + 1)).Insert Shift:=xlToRight
のところで、

実行時エラー'-2147417848(80010108)':
オートメーションエラーです。
起動されたオブジェクトはクライアントから切断されました。

###該当のソースコード ```ここに言語を入力 With ActiveWorkbook.Sheets(MySheet) .Unprotect 第一列左列 = .Cells.Find(What:="第一列左列", After:=.Range(検索開始セル), LookIn:=xlComments, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False).Column '選択された列番号を取得 最終列右列 = .Cells.Find(What:="最終列右列", After:=.Range(検索開始セル), LookIn:=xlComments, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False).Column '選択された列番号を取得 一台列数 = 最終列右列 - 第一列左列 - 1 繰返し数 = 1 Line1: .Range(.Columns(第一列左列 + 1), .Columns(最終列右列 - 1)).Copy .Range(.Columns(第一列左列 + 一台列数 * 繰返し数 + 1), .Columns(第一列左列 + 一台列数 * 繰返し数 + 1)).Insert Shift:=xlToRight 繰返し数 = 繰返し数 + 1 If 繰返し数 < 列複製数 Then GoTo Line1 Application.CutCopyMode = False On Error Resume Next Set シート保護をかけません = .Cells.Find(What:="シート保護をかけません", After:=.Range(検索開始セル), LookIn:=xlComments, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False) '選択された行番号を取得 On Error GoTo 0 If シート保護をかけません Is Nothing Then .Protect Else .Unprotect End If End With

###試したこと
入力規則を触った後でも、軽いシートの場合には、発生しません。

###補足情報(言語/FW/ツール等のバージョンなど)
Excelバージョンは2010です。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2017/07/12 07:19

「入力規則のあるセルにリストからデータを選択した後に」というのは、入力規制のあるセルに値を代入しようとしたという事ですか? エラーが発生する状況が、よく理解できないのですが(主として日本語が)
101

2017/07/12 07:46

早速ありがとうございます。エラーが発生するのは、マクロ起動中です。「入力規則のあるセルにデータを投入した後にマクロを起動するとエラーが発生します」その他の場合には問題が起こらないようです。解りにくくてすみませんが、ご教示いただければ幸いです。
guest

回答1

0

ベストアンサー

バシッとした回答ではありませんが…

オートメーションエラーは経験上、過負荷っぽい時(?)、大量の情報を処理しようとする時(?)、無いオブジェクトにアクセスしようとしたり(?)といった、普段あまり起きないであろう「もろもろ」の状況でよく起きている気がします。

まずは、エラーが起きるであろうブックを保存し、どのシートのどの部分でエラーが起きるか、再現性を検証するのに必要なデータ(材料)をそろえてください。

続いて、VBAエディタでコードの左端をつつくと、ブレークポイント(赤い丸)を付けられたと思います。VBAを走らせたときに、このブレークポイントで一時停止できますので、以下の行より上の部分で怪しいところを何か所かマークを付けて走らせてください。特に怪しい部分については、一行毎に動かしてください。

.Range(.Columns(第一列左列 + 一台列数 * 繰返し数 + 1), .Columns(第一列左列 + 一台列数 * 繰返し数 + 1)).Insert Shift:=xlToRight

この時に、この行で何が起きてオートメーションエラーが出てきたか、実は少し前の行で異常な動作をしていた、などを元にもう一度teratailで相談してみてください。

むしろ、ここまでできればきっと自力で解決できると思います。
どうしてもオートメーションエラーを解決できないときには、全く別の関数や方法を使って代替手段を用意するしかないと思います。

Good luck!

投稿2017/07/12 08:34

編集2017/07/12 08:39
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

101

2017/07/12 08:46

slash様 早速のご回答ありがとうございます。 おっしゃる通り、エラーが起こるシートは決まっているようなんです。 前段階で異常が起こっているとの発想はありませんでしたので、 もう一度、一行づつ確認してみます。新たな発見がありましたら、また、質問させてください。 今後もよろしくお願いいたします。
101

2017/07/13 00:24 編集

slash様 おはようございます。 ご指導いただいた様に、数種類のシートで確認し、エラーが起きる前に異常がないかも確認しました。 あるシートで、異常なく終了した場合には、それ以降「入力規則のあるセル」を触らないかぎり問題が起こりません。 そこで、問題の行の前に、下記のようなダミーのコピー貼り付けを挿入してみましたところ、問題解決いたしました。根本原因にたどりつけていない感じはありますが、処理速度にも影響がないようですので、これにて対処しようと思います。この度は、貴重なご指導大変ありがとうございました。助かりました。 On Error Resume Next 'エラー処理 .Range(.Columns(Columns.Count), .Columns(Columns.Count)).Copy .Range(.Columns(Columns.Count), .Columns(Columns.Count)).Insert Shift:=xlToRight On Error GoTo 0 'エラー処理解除
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問