VBAテクニック集 VBA一覧 デバッグ・エラー処理 開発環境・設定トラブル

【VBA】Microsoft Forms 2.0が参照設定に表示されない原因と対策

ExcelVBAでクリップボード操作やDataObjectを使った処理を実装しようとした際、
「参照設定の一覧に Microsoft Forms 2.0 Object Library が見当たらない」
という状況に遭遇したことはありませんか。

ネットや書籍のコードをそのまま試そうとしても、
・参照設定に存在しない
・チェックできない
・そもそも表示されない
といった問題に直面し、処理が止まってしまうケースは非常に多いです。

特に社内PCや配布用マクロ、64bit環境ではこの問題が頻発します。
本記事では、なぜMicrosoft Forms 2.0 Object Libraryが表示されないのか
どうすれば正しく対応できるのか
さらに 参照設定に依存しない実務向け設計 まで含めて徹底解説します。

目次

✅ Microsoft Forms 2.0 Object Libraryとは何か

このライブラリは、VBAで DataObject を利用する際によく登場します。
クリップボード操作、テキストの受け渡しなどで使われるため、
多くのサンプルコードで前提条件のように書かれています。
しかし実際には、このライブラリは「常に存在するもの」ではありません。
環境によっては最初から登録されていないこともあります。
まずは、このライブラリの正体を整理します。

・VBA専用のライブラリではない

Microsoft Forms は、元々ユーザーフォーム関連のコンポーネントです。

・DataObjectはFormsに含まれている

クリップボード操作のために利用されます。


✅ 参照設定に表示されないのは異常なのか?

結論から言うと、異常ではありません
多くの解説では「参照設定にチェックを入れる」と書かれていますが、
それは「表示されている環境」の話です。
特定のOffice構成では、参照設定一覧に表示されないのが正常動作です。
ここを誤解すると、「環境がおかしい」「Officeが壊れている」と勘違いしてしまいます。
まずは、表示されない理由を冷静に整理しましょう。

・Officeの構成によっては非表示

特にClick-to-Run版で起こりやすいです。

・64bit版Officeで発生しやすい

32bit向けライブラリが前提になっている場合があります。


✅ よくある環境パターンと発生条件

Microsoft Forms 2.0 Object Libraryが見つからないケースには、
いくつかの典型的な環境パターンがあります。
自分の環境がどれに該当するかを把握することが、解決への第一歩です。

・Office 64bit(特に企業PC)

参照設定に表示されないことが多いです。

・Officeの最小構成インストール

不要なコンポーネントが省かれています。

・配布用PC・VDI環境

セキュリティ上の理由で制限されています。


✅ 無理に参照設定を追加しようとする危険性

「表示されないなら、手動で追加すればいい」と考える人もいますが、
この対応は 実務では推奨されません
理由を理解せずにdll登録などを行うと、
・他のVBAが動かなくなる
・Office更新で再発する
といった問題を引き起こします。
ここでは、そのリスクを整理します。

・環境依存が強くなる

別PCで動かなくなる原因になります。

・管理者権限が必要な場合が多い

社内PCではほぼ不可能です。


✅ 結論:参照設定に依存しない設計が正解

実務で最も安定する答えは、
Microsoft Forms 2.0 Object Libraryに依存しない書き方をすることです。
これにより、参照設定が存在しない環境でも同じコードが動作します。
ここを理解していないと、
「自分のPCでは動くが、他人のPCでは動かない」
という典型的なVBAトラブルに陥ります。

・CreateObjectを使う

参照設定不要でDataObjectを扱えます。

・配布マクロでは必須の考え方

実務ではこちらが標準です。


✅ CreateObjectを使った正しいDataObjectの利用方法

以下が、参照設定に依存しない 安全な基本形 です。

Sub Sample_DataObject()

    Dim objData As Object
    Set objData = CreateObject("Forms.DataObject")

    objData.SetText "test"
    objData.PutInClipboard

End Sub

この書き方であれば、
参照設定一覧にMicrosoft Forms 2.0 Object Libraryが表示されていなくても動作します。

・Object型を使うのがポイント

型指定を避けることで環境差を吸収します。

参考:【VBA】クリップボードを操作する方法_値の追加と呼び出し


✅ 参照設定あり/なしのコードの違い

ここで、よくある2つの書き方を比較します。

・参照設定あり(非推奨)

Dim objData As New MSForms.DataObject

→ ライブラリが存在しないとコンパイルエラーになります。

参考:【VBA】クリップボードをクリアにする方法(DataObject)

・参照設定なし(推奨)

Dim objData As Object
Set objData = CreateObject("Forms.DataObject")

→ 環境差に強く、配布向きです。


✅ 既存コードでエラーが出る場合の修正ポイント

すでに動かないコードが存在する場合は、
以下の点を重点的にチェックしてください。

・MSForms.DataObject が宣言されていないか

ここが最も多い原因です。

・Dim の型指定を修正する

Object型へ変更します。


✅ Microsoft Formsが完全に使えない環境はあるのか?

ごく一部ですが、
Forms自体が利用できない特殊環境も存在します。
この場合でも、設計で回避することは可能です。

・DataObjectを使わない設計に切り替える

CopyModeなどの代替手段を検討します。

・ユーザー操作に委ねる判断

自動化しすぎない選択も重要です。


✅ 参照設定トラブルが起きやすい実務シーン

この問題は、以下のような場面で特に表面化します。

・社内配布用マクロ

全員の環境が違うためです。

・SES・客先常駐案件

PC環境を選べません。

・長期間運用されるツール

Office更新で再発します。


✅ 「動く環境で作る」から「動く設計で作る」へ

VBA初心者が陥りやすい罠は、
「今の自分のPCで動くこと」をゴールにしてしまう点です。
実務ではそれでは不十分です。
どの環境でも壊れにくい設計こそが重要になります。
参照設定問題は、その典型例です。


✅ エラーハンドリングと組み合わせた安全設計

DataObjectを使う場合も、
失敗する可能性を前提に設計することが重要です。

On Error Resume Next
Set objData = CreateObject("Forms.DataObject")
If Err.Number <> 0 Then
    MsgBox "クリップボード機能が利用できません"
    Exit Sub
End If
On Error GoTo 0

✅ 実務でありがちな失敗とその回避策

  • 参照設定がある前提でコードを書く
  • 他人の環境を想定していない
  • ネットのコードをそのまま流用する

これらは、VBAに慣れてきた頃ほど起こりやすい失敗です。


 

✅ まとめ:Microsoft Forms 2.0 Object Libraryがない場合の正解

  • 参照設定に表示されないのは異常ではない
  • 無理に追加しようとするのは危険
  • CreateObjectを使えば参照設定は不要
  • Object型で宣言するのが実務の基本
  • 環境依存しない設計が最重要

これらを理解しておけば、
参照設定トラブルでVBAが止まることはほぼなくなります
配布用・業務用マクロを作成する際は、
ぜひこの考え方を標準にしてください。

Microsoft Forms 2.0 Object Libraryをどうしても使いたい場合

VBAのメニュー「ツール」>「参照設定」>「参照」をクリック

フォルダ画面が表示されます。

「FM20.DLL」をダブルクリックします。
「FM20JPN.DLL」では似ていますが別物になりますので気をつけてください。

「Microsoft Forms 2.0 Object Library」が一覧に表示されますので、チェックし「OK」をクリックします。

「Microsoft Forms 2.0 Object Library」で使用できるオブジェクトやコントロールとは

  • CommandButton : クリック可能なボタン。
  • TextBox : テキスト入力を受け付けるフィールド。
  • ラベル: テキストラベル。
  • コンボボックス: ドロップダウンリスト。
  • ListBox : アイテムリスト。
  • CheckBox : チェックボックス。
  • オプションボタン:ラジオボタン。
  • トグルボタン: トグルボタン。
  • TabStrip : タブを持つコントロール。
  • MultiPage : 複数のページを持つコントロール。
  • ScrollBar : スクロールバー。
  • SpinButton : スピンボタン(上下ボタン)。
  • 画像: 画像を表示するコントロール。
  • フレーム: 他のコントロールをグループ化するフレーム。
  • タイマー: タイマーイベントを発生するコントロール。
  • DataObject : クリップボード操作を簡単にするオブジェクト。

    -VBAテクニック集, VBA一覧, デバッグ・エラー処理, 開発環境・設定トラブル