2016-04-22 20 views
0

私は多くのシートを含むブックを持っていますが、その1つは基本的にサインインシートです。各行にはNameセルがあり、これには別のシートList Fillerを参照するデータ検証ドロップダウンリストがあります。隣接するセルは、VLOOKUPを使用してNameセルを参照し、目的の値(ID、電話番号など)を取得します。これはかなりうまくいく。相対的なシート参照を強制しますか?

ワークブックを個々のワークシートに分割するマクロがあります。簡単に言えば、ブック全体を電子メールで送る代わりに、私はそれを分割してサインインシートに電子メールで送ります。 Sign In SheetからList Fillerへの参照を容易にするために、List Fillerシートを新しいSign In Sheetワークブックにコピーしました。

... 
xWs.Copy 
Application.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xWs.Name & ".xlsm", FileFormat:=52 
... 
masterWB.Sheets("List Filler").Copy Before:=newWB.Sheets(1) 
... 

新しいブックを開くと、リストフィラーとサインインシートの両方が表示されます。しかしマスターブックに、VLOOKUPの参照やデータ検証ソース参照すべてのポイント:

データ検証ソースに変更:だからVLOOKUPを維持

=IFERROR(VLOOKUP(O14,'[workbookname.xlsm]List Filler'!A:M,12,FALSE),"") 

:VLOOKUPに変更

='[workbookname.xlsm]List Filler'!#REF! 

マスターワークブックのList Fillerシートを参照していました。

基本的に2つの問題があります。

1)VLOOKUPリファレンスは、List Fillerシートを比較的参照する必要がありますが、マスターブックで探す必要はありません。私はこれをカスタム関数で修正することができます(私は他の場所でそれをどうやって行うのですか)、ここの修正はおそらく(2)の場合と同じです。

2)データ検証ソース参照は、マスターブックの元のものではなく、「ローカル」リストフィラーシートに向かう必要があります。

これに関するお手伝いがあれば幸いです。明確化が必要な場合は、私に知らせてください。また、必要に応じてより多くのコードスニペットを提供できます。

ありがとうございます!

編集1: 追加するだけで、サインインシートが最終的にマスターブックに移動/コピーされるため、リストフィラーの参照を「ローカル」にしておきたいと思います。サインインシートはマスターブックからマスターブックに移動し、マスターブックに戻ります。リストフィラーシートにアクセスする必要がありますが、サインインシートが入っているワークブックには常にリストフィラーとして存在します。 $ A1 $ 1はいつもA1を参照して、意味があれば '$ List Filler'をしたい。

@OpiesDad

に代わって投稿する代わりの範囲を参照する

+0

"[workbookname.xlsm]"の検索置換を行い、それを " – OpiesDad

+0

"に置き換えることができます。最初は、マスターブックの範囲を指定して削除していきます新しいワークブックの名前付き範囲を指定し、同じ名前の新しいワークブックに新しいワークブックを追加します。次に、セルをリストする代わりに、データ検証で名前付き範囲を使用します。これがうまくいくかどうかはわかりませんが、試してみる価値があります。 – OpiesDad

+0

これは、 "最初のブックから名前付き範囲を使用しますか"などのコピーを実行すると警告が表示される可能性がありますが、おそらく警告を抑制して対処する可能性があります。 – OpiesDad

答えて

0

として:

'List Filler'!A:M 

または似たような、参照する限り、外部のブックへの参照を防止します名前付き範囲を定義しますこの問題で説明されているようにローカルに存在します。

これは、あなたがエントリを追加することができ、このような

Tablename[[SomeVar:AnotherVar]] 

として、単に所望の範囲で表を挿入して、テーブルの参照に基づいて、それを命名された名前付き範囲のダイナミックを、持っていることが最善かもしれ空白や欠落したデータの危険性を冒さずにデータ検証リストに追加することができます。

0

1つのアイデアは、新しいブックのリンクを置き換えることです。そうすれば、新しいワークブックを保存する必要があります。ブックが保存されていない場合、保存されていると言えるでしょう。

masterWB.Sheets("List Filler").Copy Before:=newWB.Sheets(1) 
    ... 
    newWB.Saved = True 
    newWB.ChangeLink Name:=masterWB.Name, NewName:=newWB.Name, Type:=xlExcelLinks 
    newWB.Saved = False 

Excel2013ではうまく機能しました。

関連する問題