次の方法で共有


「コンパイルエラー:メソッドまたはデータメンバーが見つかりません」のエラー

質問

2011年12月8日木曜日 6:40

こんにちは。

VBAツールでエラーが発生し、原因が不明なため、質問させてください。

初心者のため分かりづらい表現などありましたらご容赦ください。

Excel2003で作成したツールで、Excel上でAccessのmdbを参照しデータを編集、閲覧できるツールです。

Windows XP & Excel2003、Window 7 & Excel2007 での動作確認は問題なくできたのですが、Windows 7 & Excel2003 の場合、データを呼び出して表示する処理で、

「コンパイルエラー:メソッドまたはデータメンバーが見つかりません」というエラーが発生しました。

http://support.microsoft.com/kb/2297924/ja

↑の情報を得て、回避策を試してみたのですが改善しません。

 

デバッグを行うと、mdbから取得したレコードセットのフィールド名をExcelのA列から検索する処理の中で、「TempField.Name」の.Nameの部分でエラーとなっているようでした。

==

    With myRs
    For Each TempField In .Fields
       
        Set srcRange = Worksheets("param").Range("A:A")
        Set fndRange = srcRange.Find(What:=TempField.Name, lookat:=xlWhole)
        If fndRange Is Nothing Then
            Cells(4, i).Value = TempField.Name
            i = i ; 1
        End If

    Next
    End With

==

ただ、同様の処理を他のファンクションでも行っているのですが、そちらは無事動作しています。(.Nameプロパティも使用しています。)

 

解決案などありましたらご教授いただけますと幸いです。

何卒よろしくお願いいたします。

すべての返信 (5)

2011年12月8日木曜日 7:04

デバッグで、「TempField.Name」の.Name でエラーとありますが、左記の部分を含む行ではなくピンポイントで左記と判断した理由はありますか?

 

可能であれば下記の部分でブレイクして、srcRange や TempField のウォッチ式を確認してみて下さい。

Set fndRange = srcRange.Find(What:=TempField.Name, lookat:=xlWhole)


2011年12月8日木曜日 8:32

ご返信ありがとうございます!

エラーメッセージが表示され、デバッグを行った際に、

上記のコードを含んだファンクション名の行(先頭行)が黄色く表示され、

「TempField.Name」の.Name の部分が選択された状態で止まっていたため、

Name部分でエラーが発生していると判断しました。

該当のファンクションの処理が走る前にエラーが発生しているようなので、エラー部分でブレイクすることができなさそうです。。

「TempField」のうしろに「.」を入力すると、入力補助のようなポップアップが表示されるかと思うのですが、

正常に作動するPCでは「Name」などその他10件程の候補が表示されますが、

エラーが発生しているPCでは「Name」が表示されず、その他の候補も3件ほどしか表示されません。

 

お手数をおかけいたしますが、引き続きよろしくお願いいたします。


2011年12月8日木曜日 8:49

状況から判断するに、何らかの参照設定が足らない気がします。一度、参照設定をチェックしてみて下さい。

 

★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/


2011年12月8日木曜日 9:55

ご返答ありがとうございます。

VBAを開いて参照設定を確認したのですが、エラーが発生しているPCも正常に動作するPCも、

チェックが入っているものはすべて同じでした。

チェックが入っていても欠けている・・ということがあるのでしょうか???


2011年12月9日金曜日 2:02

もしかしたらですが、TempField変数の定義に問題があるのかもしれません。

※正しく型を認識出来ていないのかもしれません。

型の指定 (Dim TempField As ・・・ の ・・・の部分)の指定をフルパス指定にしてみて下さい。

 

同様の現象か分りませんが、昔VBAで Trim 関数が効かない環境があって全て Strings.Trim に変えた事があった様な無かった様な・・・