[[20160608120832]] 『オートメーションエラーについて』(かな) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『オートメーションエラーについて』(かな)

複数ブックからの抽出時のオートメーションエラーについて教えてください。

以前こちらで紹介されていたコードを加工させていただき、
下記のコードを使用させてもらってます。

(ごめんなさい、引用のタグ付け?が分からなかったので、
こちらで加工したコードを載せさせていただきます。)

Sub 抽出()

   Dim myPath As String, myXls As String
   Dim wb As Workbook, r As Range, dst As Range
   Dim i As Long, n As Long, o As Long

   myPath = "▲▲▲"
   myXls = Dir(myPath & "*.xls*")

   Application.ScreenUpdating = False
   Application.DisplayAlerts = False

   With ThisWorkbook.Sheets("Sheet1")
              Set dst = .Range("A2")
   End With

   Do Until myXls = ""
           Set wb = Workbooks.Open(myPath & myXls)
           Set r = wb.Sheetsの("No1").Range("D1").CurrentRegion
           r.AutoFilter
           r.AutoFilter Field:=4, Criteria1:="<>", _
                                   n = r.Columns(4).SpecialCells(xlCellTypeVisible).Count - 1
           If n > 0 Then
               r.Offset(1).Copy
               dst.Offset(o).PasteSpecial xlPasteValues
           End If
           o = o + n
           wb.Close False
       End If
       myXls = Dir()
   Loop
 Application.ScreenUpdating = True
 Application.DisplayAlerts = True

End Sub


ここから質問なのですが、
このコードを実行すると、
”オートメーションエラーです
例外が発生しました ”
、と出ます。

ステップインで1行づつ試すと、エラーなく終わるのですが
一気に試すと上記エラーになります。

この場合どういったエラーが考えられるでしょうか??

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 >ステップインで1行づつ試すと、エラーなく終わるのですが 

 と言うことは、これが生きているか死んでいるかの違いでは?
          ↓
 >Application.ScreenUpdating = False

 一度、そのステートメントを殺して、テストしてみたら如何ですか?

(半平太) 2016/06/08(水) 12:39


半平太様

 >Application.ScreenUpdating = False

を消して試してみましたが、新たな疑問が出てきました。

上記の画面更新表示のあるなしに関わらず、
エクセルのシート画面からVBAを実行すると、
オートメーションエラーになります。

ただ、VBEの画面から再生ボタンを押すと、
上記の画面更新表示のあるなしに関わらず、
エラーなく、抽出されます。

ちょっと更に混乱してしまいました、、、
シートから実行するのと、VBE画面から再生ボタンを押すのは
何か違いがあるのでしょうか??
(ステップインじゃないです)

(かな) 2016/06/08(水) 13:50


 一般論ですけど オートメーションエラーは、実行しながら関連のオブジェクトを参照していく、その参照ができていないタイミングで
 そのオブジェクトに関する処理を行う場合に多く発生します。
 (コードと次のコードという場合もありますし、1つのコード内でのVBA側の内部処理という場合もあります)

 ステップ実行は、コンピュータの内部処理速度に比べると膨大な時間なので、各処理間の間隔が十分に大きく
 オブジェクトの参照が、しっかりとできるのでエラーにはならないのでしょうね。

 VBE画面のメニューからの実行も、ステップ実行ほどではありませんが、通常の実行とは異なる環境を
 VBEが提供してくれているんだと推察しています。

 難問かもしれませんし、ちょっとした変更で解決するかもしれませんが、いずれにしても
 【本物の】コードを見せていただきたいですね。

 Set r = wb.Sheetsの("No1").Range("D1").CurrentRegion

 というコードは実際には書かれていないでしょうし

 r.AutoFilter Field:=4, Criteria1:="<>", _
                         n = r.Columns(4).SpecialCells(xlCellTypeVisible).Count - 1

 これも、コード改行をやめると

 r.AutoFilter Field:=4, Criteria1:="<>", n = r.Columns(4).SpecialCells(xlCellTypeVisible).Count - 1

 こんな、へんてこりんなコードで、これでは実行そのものができないはずですから。

(β) 2016/06/08(水) 14:03


私も、ところどころ動きそうもないコードなのは「?」でした。

そこは置いておいて、フィルタをかける事と、かけた結果をコピーする事を連続していますが、表示が絞られる前にコピーしようとしてエラー、とかになっていませんかね?

対策は、フィルタをかけた直後にDoEventsを入れてみること。いかがでしょうか?
(???) 2016/06/08(水) 14:09


 以下のような原因もあるようです。
 そちらのケースとは異なるかもしれませんが。

http://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=175963&rev=0

(β) 2016/06/08(水) 14:09


β様

ひとまず、使用しているコードです。
ごめんなさい、私が携帯から操作してるので、
途中消したりしておかしくなってました!

Sub 抽出()

    Dim myPath As String, myXls As String
    Dim wb As Workbook, r As Range, dst As Range
    Dim i As Long, n As Long, o As Long

    myPath = "★★★"
    myXls = Dir(myPath & "*.xls*")

    Application.DisplayAlerts = False

    With ThisWorkbook.Sheets("Sheet1")
        Set dst = .Range("A2")

    End With

    Do While myXls <> ""
        If myXls <> ThisWorkbook.Name Then
            Set wb = Workbooks.Open(myPath & myXls)
            Set r = wb.Sheets("No1").Range("D1").CurrentRegion

            r.AutoFilter
            r.AutoFilter Field:=4, Criteria1:="<>", _
                        Operator:=xlAnd, Criteria2:="<>#N/A"
            n = r.Columns(4).SpecialCells(xlCellTypeVisible).Count - 1
            If n > 0 Then
                r.Offset(1).Copy
                dst.Offset(o).PasteSpecial xlPasteValues
            End If
            o = o + n
            wb.Close False
        End If
        myXls = Dir()
    Loop
 End Sub

(かな) 2016/06/08(水) 14:23


β様
???様

β様にご提示頂いた”分析ツール”のアドインのチェックをはずすを先に試した
ところ、エラー出ませんでした!!

ちょっと私自身、未熟なためなぜエラーがなくなったのか分かりませんが・・・

???様
DoEvents恥ずかしながら初めて知りました。
ちょっと調べてみます
(かな) 2016/06/08(水) 14:30


 >>ちょっと私自身、未熟なためなぜエラーがなくなったのか分かりませんが・・・ 

 βもわからないんです。
 というのは、βは xl2003以来、PCセットアップ時に必ず、エクセルの、この分析ツールにチェックを入れ
 FUNCRES がアドインされた状態で使ってきました。その後、xl2007-->xl2010-->xl2013 と、同様にしてきましたが
 過去から現在に至るまで、このことで障害が起こったことはないんです。

 でも、かなさんも、あるいはご紹介したトピの関係者さんも、この手当てで障害がなくなったといわれているので
 なにか、あるんでしょうね。

(β) 2016/06/08(水) 14:38


不思議ですね。

ともあれ、皆様本当にありがとうございました!!
(かな) 2016/06/08(水) 15:29


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.