VBA:

2016-10-11 12 views
2

私は関数でRange.Find()をカプセル化する必要がある関数からRange.Find()結果を返すので、私は(定義されたすべてconstsをR1、C1などれる)は、以下を有する:VBA:

Function FindData(FindWhat As Variant) As Range 
    Dim TheR As Range 
    Set TheR = Range(Cells(R1, C1), Cells(R2, C2)).Find(FindWhat, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext) 
    FindData = TheR 
End Function 
通話が例えばあるので、私は、文字列で渡している

Set FirstCell = Call FindData("MyValue") 

VBAは、メッセージObject variable or With block variable not setとライン​​にpukes。このif-blockを追加しようとしました:

If (TheR Is Nothing) Then 
    FindData = Nothing 
Else 
    FindData = TheR 
End If 

ただし、それは違いはありません。 Find()が私に与える値を返すにはどうすればよいですか?

答えて

2

オブジェクト変数の場合、関数でもSetキーワードを追加する必要があります。

Function FindData(FindWhat As Variant) As Range 
    Dim TheR As Range 
    Set TheR = Range(Cells(R1, C1), Cells(R2, C2)).Find(FindWhat, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext) 
    Set FindData = TheR 
End Function 
をそして、あなたは Callあなたは括弧を使用する必要があるので、関数からの出力を得ることはありません使用する場合::;)

だから最後にそれを追加

Set FirstCell = FindData("MyValue") 
+0

ああ、ああ!私は_that_を実現したはずです!多くのありがとう:) – skiaddict1

+0

@ skiaddict1:私はオブジェクトで機能を開始したときに同じ問題が発生しました! ;) – R3uK

+0

申し訳ありません、忘れてしまったばかりです。今度は – skiaddict1