2017-04-19 9 views
1

シートにデータを入力するために使用されるリストボックスを含むユーザーフォームのブックがあります。Excel 2013 VBA:ワークブック間をクリックするとアクティブワークブックを設定する

私は開いている複数のワークブックを持っているとActiveworkbookの変更がユーザーフォームを含むブックを反映する前に、私は、他のワークブックのユーザーフォーム上のリストボックスに直接1つのワークブックからListBox_Changeイベント火災をクリックした場合。したがって、コードがSet EqDataSht = ActiveWorkbook.Worksheets("Equipment-Data")に達すると、私が出てくるブックに「Equipment-Data」という名前のシートが含まれていないため、添え字が範囲外のエラーになります。

UserFormの親にActiveWorkbookを設定する最も良い方法は何ですか?私はworkbook_openにpublic変数wb = ActiveWorkbookを設定しているか、Err.Number = 9をトラップし、ユーザーフォームをクリックする前にシートをクリックするように指示しています。私は完全に見落とされている単純なものがあると確信しています(VBAアマチュア)。

思考?

+1

なぜ、「ActiveWorkbook」を使うのはなぜですか?あなたが作業している 'Workbook'オブジェクトへの参照を保持し、それらを使用してください。 –

+0

http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros –

答えて

3

activeworkbookの代わりに、コードが存在するブックを返すthisworkbookを使用します。

有効にするにはthisworkbook.activateは役に立ちます

+0

注:これはUserFormが 'ThisWorkbook'に対して動作する場合にのみ機能します。実行時に他のワークブックがアクティブ*である必要がある場合(同じことが明らかにOPの詳細が不十分な場合)、これは同じ理由で機能しない可能性があります。 –

+0

ありがとう!はるかに簡単ではありませんでした! @DavidZemensに答えるために、userformを持つワークブックは完全に自己完結型であり、つまり他のワークブックには作用しません。 – MattD

+0

@MattDこのアプローチは* this *インスタンスではうまくいくでしょうが、将来遭遇するかもしれないより複雑なシナリオではうまくいかないでしょう:) –

関連する問題