2017-01-11 11 views
0

VLookup関数をCellからMacroに移動すると#N/Aが返される問題があります。VLookupはセルで動作しますが、マクロでは動作しません

現時点では、書式設定されていない2番目の表を参照している表があり、書式付きリストを作成しています。フォーマットされたリストは一連のVLOOKUPコマンドを使用して作成されますが、これには手動で新しい行と 'SubPart'という名前を入力する必要があります。

私は単純にソーステーブル全体を読んで、新しいフォーマットされたマクロをワンクリックで読み込むマクロを書いています。

残念ながら、VLOOKUPがセルからマクロに変換されたときに動作しないようです。

Sub PopulateSubs() 


On Error GoTo MyErrorHandler: 
Dim SubAssy, SubPart As String 
Dim BomCount, i As Integer 
Dim BlankRow As Long 
Dim Source_Table As ListObject 

Set Source_Table = Worksheets("BoMs").ListObjects("Table_Query_From_Syspro") 


SubAssy = InputBox("Enter the Subassembly:") 

If Len(SubAssy) > 0 Then 
    BomCount = Application.CountIf(Range("Table_Query_from_Syspro[ParentPart]"), SubAssy) 

For i = 1 To BomCount 

    BlankRow = Range("A10000").End(xlUp).Row + 1 
    Cells(BlankRow, 1).Select 
    SubPart = SubAssy & i 
    ActiveCell = i 
    ActiveCell.Offset(0, 1).Select 
    ActiveCell = Application.WorksheetFunction.VLookup(SubPart, Source_Table, 2, 0) 
    ActiveCell.Offset(0, 1).Select 
    ActiveCell = Application.WorksheetFunction.VLookup(SubPart, Source_Table, 3, 0) 

Next i 

Else 

    MsgBox "You entered an invalid value" 

End If 


MyErrorHandler: 
If Err.Number = 1004 Then 
MsgBox "Sub assembly Not Present in the table." 
End If 

End Sub  

マニュアルテーブルのVLOOKUPは正常に動作していましたが、このアプリケーションでは#N/A以外は返すことができません。

私はこのサイトで同様の解決策を検討し、SubPartを「SubPart」と「SubPart」としてマクロを実行しましたが、いずれの用語も役立たないようです。

ソーステーブルはすべてのセルで[全般]としてフォーマットされていますが、これが文字列エントリとタイプの不一致を引き起こすかどうかはわかりません。

ありがとうございます!

+0

'Source_Table' ** Dim'ed **と**セット**? –

+0

'Source_Table'はどのように定義されていますか? #N/Aエラーは、値がソース表の最初の列に見つからないことを示します。また、SubPartのデータ型がSource_Tableの最初の列と同じであること、つまりtext対numberもチェックします。 – teylyn

+0

私の問題は、テーブルをマクロで定義する必要があることを知らないことに起因すると思われます。私はそれを細胞式の中でこう呼んだのだと思った。わかりやすくするために、Source_Tableは、セルから作業している場合にVLOOKUPで参照できる、ワークブック内の既存のテーブルです。 – Hamburgertime

答えて

0

この作品罰金 ... Application.WorksheetFunction.VLookup(サブパート、Application.Range偽( "SOURCE_TABLE")、6、)

ある
+0

ありがとう、私はRange()関数のすべての形式を試したと思ったが、私はそれを逃したに違いない。できます! – Hamburgertime

0

vlookupを呼び出す方法はWorksheetfunctionのメンバーであるため動作しません。

Application.Worksheetfunction.VLookup 

これは、ほとんどのエクセル式に当てはまります。 vbaにはmin/max/nowのように埋め込まれている関数がいくつかあり、特にWorksheet関数のメンバーを通して呼び出す必要はありません。

+0

こんにちはニック、お返事ありがとうございます。式にWorkSheetFunctionを追加しましたが、マクロを実行するときに1004エラーが発生します。問題を特定するために、コード全体をOPに貼り付けました。 – Hamburgertime

+0

私はフォローしてもわかりませんが、Source_Tableの宣言が表示されるようになりましたが、コードでこれ以上使用されていませんか? –

+0

私はSource_Table宣言を表示するようにOPを正しく更新しました。私は私の混乱は、COUNTIF関数が私が働いているテーブルを直接参照できるという事実に由来すると思われますが、何らかの理由でVLOOKUP関数が私が完全に理解していないこの余計な回避策を必要とします。現在のマクロはエラー1004ダイアログボックスを返します。 – Hamburgertime

関連する問題