2

プロジェクトへの参照として追加する必要がある PISDK の多くのオブジェクトを使用する VBA コードがあります。

変数を明示的に宣言する必要があります。そうしないと、コードが機能しません。どうしてか分かりません。pt as objectたとえば、の代わりに宣言すると、Excel はエラー (「型が一致しません」) をスローしますPIPoint

ここに私のコードの一部があります:

Dim srv As Server
Dim pt As PIPoint
Dim pv As PIValue
Dim dt As New PITimeFormat

問題は、ユーザーがこの参照をインストールしていない場合、Excel でコンパイル エラーが表示されるため、このエラーをキャッチして処理することができないことです。このコードはユーザー定義関数で実行されるため、ユーザーがワークブックを開くとすぐにコンパイル エラーが発生します。

このエラーをキャッチできる必要があります。

このコードに遅延バインディングを完全に実装するためのドキュメントが見つかりません。本当にできるかどうかはわかりません。私はそれが私の問題を解決できることを知っています。

また、参照がインストールされているかどうかを確認できることもわかっています。

thisworkbook.vbproject.references

しかし、ユーザーが Excel のオプションで vbaProject オブジェクトへのアクセスを許可していない場合、これを行うことはできません。

何か案が?

4

2 に答える 2

1

すべてをオブジェクトとして宣言し、その後 createobject を使用して問題を解決することができました。これを行う主な問題は、次のような関数を使用することでした。関数「arcValue」があります。3 つの引数を取ります: arcValue(PITimeFormat としての TimeStamp、RetrievelTypeConstants としてのモード、PIAyncnStatus としてのオプションの asynchStatus) アーリー バインディングで使用する方法は次のとおりです。

dim pt as PIPoint
dim pv as PIValue
set pv = pt.data.arcValue("01/09/2014 17:00:00", rtInterpolated)

これは機能します。しかし、私がするとき:

Dim myPISDK As Object
Dim srv As Object
Dim pt As Object
Dim pd as Object
Dim pv as Object
Set myPISDK = CreateObject("PISDK.PISDK")
Set pv = CreateObject("PISDK.PIValue")
Set srv = myPISDK.Servers.defaultserver
Set pd = pt.DATA
Set pt = srv.PIPoints("piTAG")
Set pv = pd.ArcValue("01/09/2014 17:00:00", rtInterpolated)

うまくいきません。しかし、なぜ?2 つの問題がありました: 1 つ目: 遅延バインディング (createobject) を使用する場合、「rtInterpolated」定数にアクセスできないため、同等の番号を使用する必要があります。

Set pv = pd.ArcValue("01/09/2014 17:00:00", 3)

しかし、これはまだ機能しません。だから私はそれを機能させるためにこれをしなければなりませんでした:

Set pv = pd.ArcValue("01/09/2014 17:00:00", 3, Nothing)

そして、すべてが機能し始めました。理由はわかりませんが、VBA では、オプションであっても、すべてのパラメーターを実行する何かを作成する必要があります。

このようにして、実行時にエラーを検出できるので、次のコードを使用しました。

If myPISDK Is Nothing Then
    piVerified = "Erro PI"
    Exit Function
End If

また、すべての参照を削除する必要がありました (とにかく、それらはもう使用されていません)。これは、参照が欠落しているときに、この参照に関連しないコードの他の部分で誤動作を引き起こしていたためです。

于 2014-09-04T11:40:18.613 に答える