Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11493 / 13646 ツリー ←次へ | 前へ→

【15776】「参照不可」の解除を自動化するVBAコードが知りたい しん 04/7/6(火) 15:13 質問[未読]
【15797】Re:「参照不可」の解除を自動化するVBAコー... ichinose 04/7/6(火) 18:09 回答[未読]
【15798】Re:「参照不可」の解除を自動化するVBAコー... しん 04/7/6(火) 18:58 質問[未読]
【15800】Re:「参照不可」の解除を自動化するVBAコー... ichinose 04/7/6(火) 19:46 発言[未読]
【15801】Re:「参照不可」の解除を自動化するVBAコー... しん 04/7/6(火) 20:04 お礼[未読]
【15802】Re:「参照不可」の解除を自動化するVBAコー... ichinose 04/7/6(火) 20:21 発言[未読]
【15803】Re:「参照不可」の解除を自動化するVBAコー... ichinose 04/7/6(火) 21:56 発言[未読]
【15804】Re:「参照不可」の解除を自動化するVBAコー... しん 04/7/6(火) 22:16 お礼[未読]

【15776】「参照不可」の解除を自動化するVBAコー...
質問  しん E-MAIL  - 04/7/6(火) 15:13 -

引用なし
パスワード
   Excel 2002 で作成したマクロを含むファイルを別の環境(たとえばExcel 2000)で開き、マクロを実行しようとすると、「プロジェクトまたはライブラリが見つかりません」などのコンパイルエラーが発生することがあります。

その時は、Visual Basic Editor のメニュー [ツール]-[参照設定] で「参照不可」になっている項目がないか確認します。不要な参照設定は解除します。

というようなコメントが「参照設定」の「参照不可」ライブラリの解除方法としてExcelやAccessの参考書などに記載されていますが、この「手動解除」方法を自動化するようなVBAコードはありませんでしょうか?

【15797】Re:「参照不可」の解除を自動化するVBAコ...
回答  ichinose  - 04/7/6(火) 18:09 -

引用なし
パスワード
   ▼しん さん:
こんばんは。


>Excel 2002 で作成したマクロを含むファイルを別の環境(たとえばExcel 2000)で開き、マクロを実行しようとすると、「プロジェクトまたはライブラリが見つかりません」などのコンパイルエラーが発生することがあります。
>
>その時は、Visual Basic Editor のメニュー [ツール]-[参照設定] で「参照不可」になっている項目がないか確認します。不要な参照設定は解除します。
>
>というようなコメントが「参照設定」の「参照不可」ライブラリの解除方法としてExcelやAccessの参考書などに記載されていますが、この「手動解除」方法を自動化するようなVBAコードはありませんでしょうか?

以下のコードで確認してみて下さい。
簡単なテストはしました。

'============================================================
Sub main()
  Call remove_broken_ref(Workbooks("reftest.xls"))
End Sub
'===========================================================
Sub remove_broken_ref(bk As Workbook)
'有効な参照設定を示していない参照を解除する
'input  bk : 調査対象ブックオブジェクト
'output bk : 無効参照を解除されたブック
  With bk.VBProject
   For Each obj In .References
     If obj.isbroken = True Then
      .References.Remove obj
      End If
     Next
   End With
End Sub

【15798】Re:「参照不可」の解除を自動化するVBAコ...
質問  しん E-MAIL  - 04/7/6(火) 18:58 -

引用なし
パスワード
   ▼ichinose さん:
こんばんは、たびたびいつも親切に教えて頂いてすみません。

ichinoseさんご提示の下記コード

>'============================================================
>Sub main()
>  Call remove_broken_ref(Workbooks("reftest.xls"))
>End Sub
>'===========================================================
>Sub remove_broken_ref(bk As Workbook)
>'有効な参照設定を示していない参照を解除する
>'input  bk : 調査対象ブックオブジェクト
>'output bk : 無効参照を解除されたブック
>  With bk.VBProject
>   For Each obj In .References
>     If obj.isbroken = True Then
>      .References.Remove obj
>      End If
>     Next
>   End With
>End Sub

をtest.txtのマクロに貼り付け、「参照設定」の対象となるファイルreftest.xlsはexcel2002で作成し、このファイルの参照設定として新たに「HTML Dialogs 1.0 Type Library」を設定しました。

次いで、これら2つのファイルをexcel2000のシステムが入ったマシンの同じディレクトリに置き、test.xlsを起動し、上述のマクロmainを実行したところ

実行時エラー '9':
インデックスが有効範囲にありません。

というエラーメッセージが出て先に進めません。どこが悪いのでしょうか?

ちなみに、reftest.xlsの「参照設定」は予想通り

「参照不可:HTML Dialogs 1.0 Type Library」

の先頭のチェックボックスにチェックが付いたままになっております。

Call文の前におまじないが何か要りそうですが・・・、よろしくご指導お願いします。

【15800】Re:「参照不可」の解除を自動化するVBAコ...
発言  ichinose  - 04/7/6(火) 19:46 -

引用なし
パスワード
   ▼しん さん:
状況説明が不足していました。
投稿したコードは、対象ブックが開いている状態で実行するコードです。

>
>ichinoseさんご提示の下記コード
>
>>'============================================================
>>Sub main()
  
   workbooks.open thisworkbook.path & "\reftest.xls"
'  ↑対象ブックをオープンする
>>  Call remove_broken_ref(Workbooks("reftest.xls"))
>>End Sub
>>'===========================================================
>>Sub remove_broken_ref(bk As Workbook)
>>'有効な参照設定を示していない参照を解除する
>>'input  bk : 調査対象ブックオブジェクト
>>'output bk : 無効参照を解除されたブック
>>  With bk.VBProject
>>   For Each obj In .References
>>     If obj.isbroken = True Then
>>      .References.Remove obj
>>      End If
>>     Next
>>   End With
>>End Sub
>
>をtest.txtのマクロに貼り付け、「参照設定」の対象となるファイルreftest.xlsはexcel2002で作成し、このファイルの参照設定として新たに「HTML Dialogs 1.0 Type Library」を設定しました。
>
>次いで、これら2つのファイルをexcel2000のシステムが入ったマシンの同じディレクトリに置き、test.xlsを起動し、上述のマクロmainを実行したところ
>
>実行時エラー '9':
>インデックスが有効範囲にありません。
>
>というエラーメッセージが出て先に進めません。どこが悪いのでしょうか?
>
>ちなみに、reftest.xlsの「参照設定」は予想通り
>
>「参照不可:HTML Dialogs 1.0 Type Library」
>
>の先頭のチェックボックスにチェックが付いたままになっております。
>
>Call文の前におまじないが何か要りそうですが・・・、よろしくご指導お願いします。

私も簡単なテストしかしていません(いざとなると、状態作るのが難しくて・・)。
他にもあるかもしれませんが、その時は教えて下さい。

【15801】Re:「参照不可」の解除を自動化するVBAコ...
お礼  しん E-MAIL  - 04/7/6(火) 20:04 -

引用なし
パスワード
   ▼ichinose さん:

さっそくおまじない

>   workbooks.open thisworkbook.path & "\reftest.xls"
>'  ↑対象ブックをオープンする

ありがとうございました。試してみましたところ見事に

>「参照不可:HTML Dialogs 1.0 Type Library」

が綺麗さっぱり消えていました。Accessでこの問題が現実のものとして私に重くのしかかっていたのですが、これですっきりしました。さすがichinoseさんですね。ほんとうに頼りになります。ありがとうございました。

実は、このホームページのAccess質問箱や他のAccess掲示板でも同じ質問をしてみたのですが、誰もご存じなかったようです。ほんとうに助かりました。これからもよろしくご指導をお願いします。

【15802】Re:「参照不可」の解除を自動化するVBAコ...
発言  ichinose  - 04/7/6(火) 20:21 -

引用なし
パスワード
   ▼しん さん:


>
>さっそくおまじない
>
>>   workbooks.open thisworkbook.path & "\reftest.xls"
>>'  ↑対象ブックをオープンする
>
>ありがとうございました。試してみましたところ見事に
>
>>「参照不可:HTML Dialogs 1.0 Type Library」
>
>が綺麗さっぱり消えていました。Accessでこの問題が現実のものとして私に重くのしかかっていたのですが、これですっきりしました。さすがichinoseさんですね。ほんとうに頼りになります。ありがとうございました。
>
「それは、よかったですね」と言いたいのですが・・・・。
上のコード自体は、私も何度か試して成功していますが、その後のExcelの動作が
ちょっとおかしいのです。
Excelを閉じようとすると、Excelが動かなくなってしまいます。
原因がこのコードなのかそれ以外なのかは不明ですが。
(ただ、このコードの実行後から、現象が発生しています)
ですから、このコードを実用化するのは ???です。今のところ・・・。

【15803】Re:「参照不可」の解除を自動化するVBAコ...
発言  ichinose  - 04/7/6(火) 21:56 -

引用なし
パスワード
   ▼ichinose さん:

こんばんは。
続報です。
環境を整えて再度、投稿コードを実行してみました。
何度か試しましたが、

>ちょっとおかしいのです。
>Excelを閉じようとすると、Excelが動かなくなってしまいます。
>原因がこのコードなのかそれ以外なのかは不明ですが。
>(ただ、このコードの実行後から、現象が発生しています)

この現象起きませんでした。

が、原因は不明です。


Vbprojectを操作するというコードは、
多くの方が頻繁に使用しているわけではありません。

私も実際、VBAでいくつかの業務用のコードを書きましたが、Vbprojectを触るような
コードを書いたことはありません(自分だけとかまわりの人だけ使うVBAのツールみたいなものは作った事がありますが・・)。
よって、何が起こるかわからないところもあります。
(だから、ご質問のあるたびに良い機会なので試していますが)。

私もここで学んだ事だし、使いようでは役に立つと思いますから、
情報としては流しましたが、Excel2002以降では、標準設定では、実行しないということも加味して頂いて十分気をつけてお使いください。

【15804】Re:「参照不可」の解除を自動化するVBAコ...
お礼  しん E-MAIL  - 04/7/6(火) 22:16 -

引用なし
パスワード
   ▼ichinose さん:
こんばんは、新しい情報ありがとうございます。

>続報です。
>環境を整えて再度、投稿コードを実行してみました。
>何度か試しましたが、
>
>>ちょっとおかしいのです。
>>Excelを閉じようとすると、Excelが動かなくなってしまいます。
>>原因がこのコードなのかそれ以外なのかは不明ですが。
>>(ただ、このコードの実行後から、現象が発生しています)
>
>この現象起きませんでした。
>
>が、原因は不明です。

というような現象は私のマシーンでは幸い起きていません。
しかし、さきほどできた「参照不可」ライブラリの自動削除が2回目以降は

実行時エラー'-2147319779 (8002801d)':
オブジェクトライブラリは登録されていません。

というエラーが

.References.Remove obj

というステートメントで発生し、自動削除処理ができなくなりました。

>Vbprojectを操作するというコードは、
>多くの方が頻繁に使用しているわけではありません。
>
>私も実際、VBAでいくつかの業務用のコードを書きましたが、Vbprojectを触るような
>コードを書いたことはありません(自分だけとかまわりの人だけ使うVBAのツールみたいなものは作った事がありますが・・)。
>よって、何が起こるかわからないところもあります。
>(だから、ご質問のあるたびに良い機会なので試していますが)。
>
>私もここで学んだ事だし、使いようでは役に立つと思いますから、
>情報としては流しましたが、Excel2002以降では、標準設定では、実行しないということも加味して頂いて十分気をつけてお使いください。

やはり、高度なテクニックはそれなりに使い方が難しそうですね。Accessへの応用は私個人のデータベースシステムではないので、ichinoseさんのご助言にしたがって使用を差し控えることにしたいと思います。

どうもありがとうございました。でも、ichinoseさんから学ぶことが多いのでこれからもよろしくお願いしますね。

11493 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free