共有ブックでマクロエラーが出るが?

Question 33.4   Previous Next
はじめまして。VBAの素人ですので教えてください。エクセル97を使用しています。

重複するレコードを無視する為に、マクロの記述で、フィルタオプションの設定で、
抽出先-選択範囲内(F)-リスト範囲(L)-重複するレコードは無視する(R) を選択・記述して実行させると OKなんですが、
ブックの共有化を行ってマクロを実行させると、実行時エラーで「RangeクラスのAdvancedFILTERメソッドが失敗した」として終わってしまいます。
ちなみに、コード表には Columns("j:j").AdvancedFilter Action:=xlFilterInPlace, Unique:=True と書かれているんですが・・・ なぜだめなんでし ようか?
Answer   Copyright (C) 2000.10.23 永井善王
共有ブックについて、この「すぐに役立つエクセルVBAマクロ集」に初めて掲載しますので、あらましを整理しておきます。回答を手っ取り早く知りたい方は、この部分を飛ばして読んでください。

ブックを「共有ブック」として保存しておくと、複数のユーザーが同じブックを同時に使用できるようになります。

「共有ブックの作成方法」
1. [ツール]メニュー [ブックの共有]をクリックし、[編集] タブをクリックする
ブックの共有 2. 右図のようにチェックし [OK]をクリックする
3. 下図のメッセージが表示されたら [OK]
  保存を確認
4. サーバーなどへ [名前を付けて保存] する

「共有ブックの制限」
各ユーザーは共有ブックを開いて、他のユーザーを意識することなく作業して保存できます。使用可能なExcelの機能は、データ入力、行・列の挿入、数式の追加・変更、書式の変更 です。
すべての機能が使える訳ではありません。なぜかと言うと、普通のブックのように1人でフリーに使うのとは状況が異なります。例えば、共有ブックの中のシートを、ある人が勝手に削除してしまうと、他の人が困る場合があります。そのため、他の人の使用に支障を来たさないように、Excelの仕様として「共有ブックの制限」が設けられて います。

共有ブックにした後は、どんな制限を受けるか、ざっと見てみましょう

1. セルを結合すること。セルブロックの挿入・削除(行全体または列全体の挿入・削除は可能)。
2. ワークシートの削除。ダイアログボックスまたはメニューの削除。
3. 条件付き書式の定義または適用。データの入力規則の制限およびメッセージの設定・変更。

4. グラフ、図、オブジェクト、ハイパーリンクの挿入・削除。描画ツールの使用。
5. 個別のワークシートまたはブック全体を保護するパスワードの設定。パスワードの変更・削除。
6. シナリオの保存、表示、または変更。

7. データのグループ化、またはアウトラインの設定。自動集計の挿入。
8. データテーブルの作成。ピボットテーブルの作成。既存のピボットテーブルのレイアウト変更。
9.
マクロの記述、変更、表示、記録、または割り当て。ただし、 . .(後述) . .

「マクロエラーの原因」
前項の「共有ブックの制限」の 9. で、マクロに対しても色々と制限されることがわかりました。
. .(後述) . . 部分の、ただし書きは次のとおりです。

・ 共有されていない他のブックに、共有ブックでの操作をマクロ記録することは可能
・ ブックを共有する前に作成したマクロを実行できるが、次の制限がある
・ 共有ブックで実行できない操作を含んでいると、それに到達した時点でマクロの実行は中断される

「実行時エラー」は、ただし書きの最後、つまり「共有ブックで実行できない操作」に該当するためと思われます。

対 策
ではどうすれば良いかですが、フィルタしたいシートを新規ブックにコピーして、そのシートでフィルタすれば可能になります。
あなたのマクロコードの直前に、下記のように1行挿入します。
Sub 共有ブックでAdvanceFilterする()
    Worksheets("Sheet1").Copy               '共有ブックの"Sheet1"を新規ブックへコピー
    Columns("j:j").AdvancedFilter _
        Action:=xlFilterInPlace, _
        Unique:=True                        'フィルタする(重複するレコード無視)
End Sub
当然ながらフィルタした結果をコピーしたりして使う場合は、この新規のブックのシート からになります。

 

Excel VBA Macro