2017-08-23 222 views
3

Visual Studio 2013でプログラムを作成する必要がありますが、動作しないため、Microsoft Excelとその開発プレイグラウンドですべての可能性をテストしました。私は(私が使用する必要があるプログラムを供給会社が提供する)は、次のバージョンで開始:これは、基本的にアプリケーションX2000.exeを開始しVBA CreateObjectは64Bit WindowsでActiveXコンポーネントを作成できません

Sub Main() 

    Dim XServer As X2000.Server 
    Dim XApp As X2000.Application 
    Dim XSR As X2000.ScriptRoutines 

    Set XServer = New X2000.Server 
    Set XApp = XServer.AppConnection() '<- This actually fires the application 
    XApp.Visible = True 

    Set XSR = XApp.ScriptCommands 
    XSR.DATA_FILENAME = "C:\X2000\myFile.x" ' <- Code blocks here 

End Sub 

、そこに私のコードを接続し、その後DATA_FILENAME逢引ルーチンを実行し、プログラムにmyFile.xをロードしてください。その時点でそのライセンスがチェックされているので、私はアプリケーションを起動する必要があります。私は他の選択肢がありません。

今、このバージョンでは、コードは他の情報なしで "A dll is missing"と言って最後の行でブロックしていました。

Dim XServer As X2000.Server 
Dim XApp As X2000.Application 
Dim XSR As Object 

Set XServer = New X2000.Server 
Set XApp = XServer.AppConnection() 
XApp.Visible = True 

XSR = CreateObject("XApp.ScriptCommands") 

これは同様に動作しませんが、私はより多くの情報の一片与えなかった:「ActiveXコントロールは、オブジェクトを読み込むことができませんでしたが、」私は、次の手順を実行して、ScriptRoutinesオブジェクトを遅延バインディングみました。私はちょっとした研究をしたが、X2000.exeはフォルダーに見つからなかったMSVBVM60.DLLに依存していることを「Dependancy Walker」を通して知っていた。私のシステムは64ビットなので、Excelもまた、32ビット互換性を使用してVS2013でコードを試しても、コードは機能しませんでした。
私はので、私はX2000.exeのみ32ビットシステムで動作するように書かれたことを疑われ、 sysWoW64ではなく、すでにMSVBVM60.DLLを持っていた...だけsystem32がそのまま残っていたことを、見つけるために、このファイルが含まれていたthe service pack from Microsoftを、インストール:私が間違っていました。このコードは、私は、この互換性の問題を処理するために信じるactxserver function、おかげで動作します

function [Data,eng_or_met] = Read_X2000_File_BB_2(sFileName) 

XServer = actxserver('X2000.server'); 
XApp = XServer.AppConnection; 
XApp.Visible = 1; 
objX2000 = XApp.ScriptCommands; 
objX2000.data_filename = "C:\X2000\myFile.x"; 

delete(XServer); 

私の同僚は、MATLABコードで書かれた同じプログラムを実行する可能性があります。

Excel/VS2013でどうすればいいですか?

EDIT:

Iはomegastripesによって示唆コードを試みた:

Dim XSR As Object 
Set XSR = CreateObjectx86("XApp.ScriptCommands") ' create ActiveX via x86 mshta host 

CreateObjectx86機能linked hereあります。私は両方If/Else条件を試してみましたが、最後にオブジェクトが両方で、とにかく作成されません。最後の行は、私は、コードを変更しない場合に実行する内容である

Set CreateObjectx86 = oWnd.CreateObjectx86(sProgID) 

Set CreateObjectx86 = CreateObject(sProgID) 

(したがって、#If Win64ではありません)。

EDIT:この質問に対する最初の答えを1として

、私も試してみました:

Dim XServer As Object 
Dim XApp As X2000.Application 
Dim XSR As X2000.Script 

Set XServer = CreateObject("X2000.Server") 
Set XApp = XServer.AppConnection() 
XApp.Visible = True 
Set XSR = X2000.ScriptCommands 

だけ私は同じエラーを取得見つけるために。

+0

actxserverはまったく同じことを行っている可能性がありますが、コンテキストは異なります。あなたのアプリがVB6を使って書かれていたなら、あなたはMSVBVM60.dllをどこかに持っていなければなりません。これを実行します:https://www.microsoft.com/en-us/download/details.aspx?id=24417これもチェックしてくださいhttps://blogs.msdn.microsoft.com/deva/2009/12/30/development -is-visual-basic-6-0-runtime-still-supported /あなたのアプリケーションがVB6のローカライズ版を使用してビルドされている場合は、ローカライズされたVB6サポートバイナリをインストールしてください。 –

+0

* Microsoftからサービスパックをインストールしました。ファイルが含まれていた* < - 私はすでにあなたが私にリンクしているファイルを実行しました。私は 'X2000'がローカライズされたVB6で作られたことを確信することはできませんが、それはVB2000で提供される標準的なバージョンであると思います。VB2000の提供元は米国 – Noldor130884

+0

アメリカからは、あなたが本当にローカライズされたものは必要ないと思います。私がやることは、sysinternalのprocmonツールとモニタファイル(プログラムのexe名によるフィルタ)を使うことです。これは、欠落しているものを特定するのに役立ちます。それはサテライトファイルでも、あなたが考えていないファイルでもかまいません。 –

答えて

1

明らかに問題を解決しました。ハンスアンパッサンに触発され、私DimはX2000.exeを基準に応じて、唯一のオブジェクトとしてXServerを編:

Dim XServer As X2000.Server 
Dim XApp As Object 
Dim XSR As Object 

Set XServer = New X2000.Server 
Set XApp = XServer.AppConnection 
XApp.Visible = True 
Set XSR = XApp.ScriptCommands 

XSR.DATA_FILENAME = "C:\foo.x" 

DATA_FILENAMEが実際に実行されます「ScriptCommand」です。

そのように単純です。しかし、私はこれがなぜ機能するのか分かりません。

関連する問題