2017-12-17 17 views
0
Dim works As Worksheet 
Set works = ThisWorkbook.Sheets("Sheet1") 
Dim txt As Variant 

myrange = works.Range("C1:C9") 

For Each txt In myrange 
     If InStr(1, txt, "£", vbTextCompare) > 0 Then 
      Debug.Print txt.Value     '<..Object required err 
      Debug.Print works.Range("C" & txt).Value '<..Object required err 
      Debug.Print works.Cells(txt, 1).Value '<..Object required err 
      Debug.Print txt.Offset(0, 1).Value  '<..Object required err 

    End If 

Next txt 

私は "£"を含むセルの値を取得し、それを削除しようとしています。どのような場合でもオブジェクト定義エラーが発生しています。私は3つのオプションを試して、まだエラーを取得しています。私はVBA初心者で、まだ学習しています。どうすればこの問題を解決できますか?エラーが発生するのはなぜですか?Excel/VBAで一連のセルを反復処理する方法はありますか?

+0

変数txtは範囲タイプです。したがって、番号参照として使用する必要はありません。 works.Range()の代わりにこの構文を使用してください:txt.value = –

+0

あなたの返事@JoeyGrantに感謝、私もtxt.Valueを試してみましたが、私はまだエラーを取得しています。 – calin125

+0

Debug.Print txt.Value <.. object required error – calin125

答えて

1

問題点は、myrange = works.Range("C1:C9")です。あなたがあなたの代わりに値の割り当て、リファレンスの割り当てを行っていることを確認

Set myrange = works.Range("C1:C9") 

この方法:それは前にSet、などを持っている必要があります。それがなければ、VBAにあなたの変数にセルの価値を渡してほしいと言っています。それを使って、変数をその範囲を指し示すようにVBAに指示します。

明示的にRangeオブジェクトとしてmyrangeを宣言していないので、VBAは、暗黙のうちにそれVariantを宣言し、Stringとしてそれを扱います。だから、ループの中でtxtStringで、期待通りRangeではありませんでした。したがって、あなたのエラー。

最初にDim myrange As Rangeがある場合は、Setの割り当てが失敗し、すぐに修正してしまいます。

しかし、この種のエラーを防ぐ単純な習慣があります。モジュールの上部にOption Explicitを挿入します。この方法では、ALLという変数を明示的に宣言する必要があります。つまり、VBAはVariantであるとは限りません。

Tools > Optionsの関連するオプションをチェックすることで自動的に行うこともできます。

関連する問題