2016-07-19 13 views
0

私は現在、何が起こっているのを解決しようとしている私の頭を裂いている 私はVBAで2つの別の検索機能を使用して、その範囲を別の検索の範囲として設定します。それはおそらく何か本当にシンプルですが、私の人生のためには理解できません、私は現在のコードを以下に含めました。VBA、セルのアドレスを検索し、別の検索の範囲として使用

Truecheckは、スプレッドシート内で検索する名前を格納するグローバル変数です。私が定義したい範囲の開始と終了は同じ名前になりますので、truecheckは両方のために動作するはずです。

誰でもこの作品を作成する方法はありますか?

現時点では、「Firstrow = Range ....」と設定した部分を強調表示して、オブジェクトに必要なエラーを投げています。私はまた、複数の問題がここで起こっていると思いますが

編集:Potatoes.valueとTextboxinput.valueは、ユーザーフォームobject in the way the statement is written, as themethod returns the cell (or範囲を探す

Private Sub optionselect() 
    Dim LastLocation As String 
    Dim FirstLocation As String 
    Dim FirstRow As Long 
    Dim LastRow As Long 
    Dim SearchVal As String 

    FirstLocation = Range("B:B").Find(truecheck,_ 
    LookIn:=xlValues,LookAt:=xlWhole, SearchOrder:=xlByRows) 
    LastLocation = Range("B:B").Find(truecheck, LookIn:=xlValues,_ 
    LookAt:=xlWhole, SearchOrder:=xlByRows, searchdirection:=xlPrevious) 

    FirstRow = Range(FirstLocation).Row 
    LastRow = Range(LastLocation).Row 

    Potatoes.Value = Application.WorksheetFunction.VLookup(LengthInputText.Value,_ 
    Range(Cells(FirstRow, 8), Cells(LastRow, 8)), 6, False) 

End Sub 

答えて

1

FirstLocationLastLocation are both defined as文字列yet you are assigning them to a範囲にテキストボックスです`オブジェクト)を検索します。

これを機能させる最も簡単な方法は、Addressプロパティをコールに追加することです。

FirstLocation = Range("B:B").Find(truecheck,_ 
    LookIn:=xlValues,LookAt:=xlWhole, SearchOrder:=xlByRows).Address 
LastLocation = Range("B:B").Find(truecheck, LookIn:=xlValues,_ 
    LookAt:=xlWhole, SearchOrder:=xlByRows, searchdirection:=xlPrevious).Address 

しかし、これも行うことができます:それはRange.Findの戻り値の型のように見えます

Dim FirstLocation as Range, LastLocation as Range 

Set FirstLocation = Range("B:B").Find(truecheck,_ 
    LookIn:=xlValues,LookAt:=xlWhole, SearchOrder:=xlByRows) 
Set LastLocation = Range("B:B").Find(truecheck, LookIn:=xlValues,_ 
    LookAt:=xlWhole, SearchOrder:=xlByRows, searchdirection:=xlPrevious) 

FirstRow = FirstLocation.Row 
LastRow = LastLocation.Row 
+0

ありがとう!私はそれを試してみたが、今は私のVlookupで問題が発生しているだけです "vlookupクラスのワークシート関数を取得することができません"。 – Morlo4

+0

しかし、これは別の質問であり、もともと尋ねたものの範囲ではなく、最初の '8 'を' 1'に変更するとうまくいくはずです。 –

+0

うん!私はしばらくの間それを試してやっていきます。助けてくれてありがとう :)。 vlookupでfirstlocationとlastlocation変数を直接使用してこれを設定する方が良いでしょうか? – Morlo4

0

は範囲ではない文字列です。このように見て、それを試して、あなたのコードを変更します。FYI

Private Sub optionselect() 
Dim LastLocation As Range 
Dim FirstLocation As Range 
Dim FirstRow As Long 
Dim LastRow As Long 
Dim SearchVal As String 

Set FirstLocation = Range("B:B").Find("It", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows) 
Set LastLocation = Range("B:B").Find(truecheck, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, searchdirection:=xlPrevious) 

FirstRow = FirstLocation.Row 
LastRow = LastLocation.Row 

Potatoes.Value = Application.WorksheetFunction.VLookup(LengthInputText.Value,_ 
Range(Cells(FirstRow, 8), Cells(LastRow, 8)), 6, False) 

End Sub 

https://msdn.microsoft.com/en-us/library/office/ff839746.aspx

+0

正直、私はそれがすでに投稿されたのか分かりませんでした。それを投稿するにはしばらく時間がかかりました。誰かがそれを提出する前に私を殴っているようです。 –

+0

それは理にかなっています。 :) –

関連する問題