2016-03-31 11 views
1

以前使用していたWindowsの以前のバージョンのWindowsでは、Office 2003、2007、2010、2013などで動作していたVBAマクロを編集しています。 Windows 10にアップグレードしたので、このコード行は次のようになります。OSに基づいたパブリック変数タイプを宣言する

Private m_document As MSXML2.DOMDocument 

動作しません。それが必要です

Private m_document As MSXML2.DOMDocument60 

コンテキストでは、私は明示的なグローバル変数を宣言しており、これもその1つです。

問題は、私のコンピュータでこれらのマクロを編集する必要がありますが、それらのバージョンではまだ製品が使用されているため、古いOSバージョンでも動作する必要があります。私はそうでなければこの仕事をするための方法があるかどうかを知るために、たくさんのものを試しました。 MSXML6は私の古い(実行中のウィンドウズ7)と新しいコンピュータの両方にあります。この時点で、どのOSが使用されているかに応じてこの変数を定義する方法があることが私の希望です。私はあなたがOSをチェックすることができることを知っています、私はそれのためのコードを見つけましたが、OSに基づいて変数を条件付きで定義する方法はありますか?

すなわち:

if windows10 
    Private m_document As MSXML2.DOMDocument60 
else 
    Private m_document As MSXML2.DOMDocument 
+0

Mmm。 MSXML 6パーサーは2003年から始まったすべてのバージョンのOfficeで配布されていましたが、2003年はXMLの機能が導入されたことから思い出してください。それらの他のシステムでは利用できないと確信しています。単にDOMDocumentからDOMDocument60への宣言を変更するだけでは機能しませんか? –

+0

私が最初に試したことの一つは、まさにあなたが言ったからです。私はDOMDocument60に変更するとタイプミスマッチエラーが発生します。 – user2658277

答えて

1

あなたは遅延バインディングを使用する必要があります。

Private m_document As Object 

Sub testSub() 

    If windows10 Then 
      Set m_document = CreateObject("MSXML2.DOMDocument60") 
    Else 
      Set m_document = CreateObject("MSXML2.DOMDocument") 
    End If 

End Sub 

ボーナスチップとして、これを行うと、VBAでインテリセンスが失われます。したがって、それを "Private m_document As MSXML2.DOMDocument60"として設定し、intellisenseですべてのコードを作成してから、配布準備が整ったら、上記のようにレイトバインディングに戻してください。

+0

おそらく唯一のこれを行うための唯一の方法プラス素晴らしい名前。 –

+0

これは...これは完全には機能しませんでした。間違っているわけではなく、CreateObject( "MSXML2.DOMDocument60")が正しく機能しないためです。奇妙なことに、CreateObject( "MSXML2.DOMDocument")は両方のプラットフォームで正常に動作しました。だからこそ助けてくれてありがとう、これがなぜこのように働いているのかわからないし、私はVBAがこれまでよりも少し嫌いだと思う – user2658277

関連する問題