2016-08-22 16 views
1

私はinputboxに入力された値に基づいてデータクエリから別のワークシートにデータの範囲を最終的に引き出すために以下のスクリプトを実行していますが、エラー - オブジェクトが必要です。これは私は、私は、スクリプトがVlookup424オブジェクトVBAで必要なエラー

Private Sub Workbook_Open() 


Dim NextRelease As String 

If MsgBox("Would you like to promote the next release in batch?", vbQuestion + vbYesNo, "Promote the next release?") = vbYes Then 
NextRelease = InputBox("Please enter the date of the next release", "Next Release", "DD/MM/YYYY") 
ReleaseDate = Application.WorksheetFunction.VLookup(NextRelease, TRELINFO.Range("A2:B4"), 1, False) 
If NextRelease = ReleaseDate Then 
MsgBox ("Working") 

で失敗し続けるしかし、次の段階は、誰かがなぜこれまで通りの答えを提供することができますを開始することができ、メッセージボックスを表示しようとして機能しているかどうかをテストするには

この問題がうまく解決されています。 ありがとうございます!

+0

どのようなエラーが発生していますか? –

+0

'TRELINFO'これはエラーです。コード名が「TRELINFO」のシートがありますか、ワークシートに設定されているワークシートタイプの変数がありますか? – cyboashu

+0

@cyboashu - シート名はTRELINFOで、データクエリの名前はTRELINFOです。混乱を避けるために、シートをTRELINFO2に一時的に名前変更しましたが、同じエラーが返されています。 – Paul

答えて

0

ワークシートを参照する前に、を追加してみてください。 'Sheet1'をあなたのTRELINFOシートの名前に置き換えてください。

編集:ユーザー入力と一致するテーブルの最初の行に値が存在しない場合、VLOOKUPはエラーを返します。以下はExcelでテーブルのテスト(日付書式付き)を行った後の私の仕事です。

Private Sub Workbook_Open() 

Set trelinfo = Sheets("TRELINFO") 
Dim NextRelease As Long 

If MsgBox("Would you like to promote the next release in batch?", vbQuestion + vbYesNo, "Promote the next release?") = vbYes Then _ 
NextRelease = CLng(CDate(InputBox("Please enter the date of the next release", "Next Release", "DD/MM/YYYY"))) 

checkblank = WorksheetFunction.CountIf(trelinfo.Range("A2:A4"), NextRelease) 

If checkblank <> 0 Then 
    ReleaseDate = Application.WorksheetFunction.VLookup(NextRelease, trelinfo.Range("A2:B4"), 1, False) 
    If NextRelease = ReleaseDate Then _ 
    MsgBox "Working" 

Else 
    MsgBox "Release not found" 

End If 

End Sub 
+0

私は 'Set TRELINFO = Worksheets(" TRELINFO ")'を追加しようとしましたが、同じエラーが返されています。 – Paul

+0

上記を追加した後で気付きましたが、返されるエラーメッセージが1004エラーになりました - アプリケーション定義またはオブジェクト定義エラー – Paul

+0

1004エラーは、VLOOKUPが値を返せないことが原因です。間違いなくA2からA4にある値を提出しようとしましたか? – Rory

0

TRELINFOシートが存在するか、正しく名前が付けられていることを確認してください。関数がそのワークシートを見つけることができないようです。

+0

シートの名前を3回確認して、すべてが正しいことを確認できます。 – Paul

+0

他のコメントの1004エラーに気付きましたが、値が参照範囲に存在することを確認してください。 VLookupはスプレッドシート内で#NAまたは#Valueを使用するときに値が返されると、1004エラーをスローします。 – Kevin

1

NextReleaseは文字列値です。最初にDoubleに変換せずに日付の表にその文字列を表示することはできません。

あなたはVLOOKUPから値を返さないので、より簡単にMATCHを使うことができます。

WorksheetFunctionを削除すると、一致しない場合に実行時エラーを発生させる代わりに、エラーの戻り値をテストできます。

Private Sub Workbook_Open() 

Dim NextRelease As String 

If MsgBox("Would you like to promote the next release in batch?", _ 
      vbQuestion + vbYesNo, "Promote the next release?") = vbYes Then 

    NextRelease = InputBox("Please enter the date of the next release", _ 
          "Next Release", "DD/MM/YYYY") 

    If not IsError(Application.Match(CDbl(DateValue(NextRelease), _ 
        TRELINFO.Range("A2:B4"), 0) Then 

     MsgBox ("Working") 
0

ちょうど私がVLOOKUP関数を使用した場合の前に、このエラーが発生しました

ReleaseDate = Application.VLookup(NextRelease, Worksheets("trelinfo").Range("A2:B4"), 1, False) 

代わりにこれを使用します。私はWorksheetFunctionを削除するだけです。

関連する問題