2016-12-19 24 views
0

私は現在、64ビットMicrosoft Officeスイート(32ビットは問題ありません)で使用されなくなった当社のドキュメントを更新しています。PtrSafe VBA - Office 64ビット用のExcelドキュメントを更新する

私は機能と宣言を追加する「Ptrsafeという言葉を必要とすることを理解して - 私はなぜかの見当がつかない間違っている

Private PtrSafe Function executeSingle(Optional rurl As String = vbNullString, _ 
        Optional qry As String = vbNullString, _ 
        Optional complain As Boolean = True, _ 
        Optional sFix As String = vbNullString _ 
        ) As cJobject 

が、私はこの機能に追加するときには、構文私に語りました。.. PtrSafeを削除してもうまく動作します。何か案は?

+1

'PtrSafe'は独自の関数やサブシステムに置かれません.Windows APIやDLLからインポートされたものにのみ適用されます。 –

答えて

1

ダイナミックリンクライブラリ(DLL)内の外部プロシージャへの参照を宣言する場合にのみ、 "Declare"ステートメントを使用する必要があります。これを実行するときは、常にPtrSafeキーワードを使用することをお勧めします。 A.S.H.のように、あなた自身の機能のためにこれを行う必要はありません。詳細はlinkを参照してください。

ここでは、PtrSafeを使用するための正しい構文のMSDNの例を示します。

Declare PtrSafe Function GetActiveWindow Lib "User32"() As LongPtr 
     #If Vba7 Then 
      ' Code is running in 32-bit or 64-bit VBA7. 
      #If Win64 Then 
        ' Code is running in 64-bit VBA7. 
      #Else 
        ' Code is not running in 64-bit VBA7. 
      #End If 
     #Else 
      ' Code is NOT running in 32-bit or 64-bit VBA7. 
     #End If 
+0

Declareステートメントの 'End Function'はありません –

+0

Declareステートメントは、条件付きディレクティブブロック内にある必要があります。 –

+0

よろしくお願いします。私はend functionステートメントを取り出しました。条件付きブロックにdeclareステートメントを置くことができますが、なぜそれが必要なのでしょうか? –

関連する問題