やりたいこと・前提条件
Excel VBAからDocuworks APIを利用したいのですが、Docuworksファイルにアクセスするためのハンドル取得、「XDW_OpenDocumentHandle」にてエラーが返ってきてしまいます。
どこに原因があると考えられるか、またそもそもの前提条件があるのかなど、お気づきの点ありましたらご助力願いたいです。
VBA自体は実務利用していますが、外部DLLを利用するのはこれが初めてであり初心者も同然です。
FUJIFILMが出しているDocuworksAPIに関する文書も確認しましたが、それをうまくVBAに落とし込めずにいます。
利用環境は下記のとおりです。
OS:
Windows 10 Pro 64bit
開発環境:
Microsoft Office 365
Excel 64bit
Docuworks:
version9.0.6
Docuworks API:
dwsdk910
発生している問題・エラーメッセージ
下記に記すコードを走らせ、ローカルウィンドウで確認すると、下図のようになります。
仕様書には、
「関数が正常に終了したら0を返す。異常終了したときは、エラーコードを返す。」
と記されており、正常終了していないことがわかります。
なお、ポップアップされるエラーメッセージの類は一切ありません。
<追記>
この画像のエラーコードについてですが、
「Docuworksがインストールされていない。」
という意味であることが分かりました。
しかしDocuworksはインストールしています…。
<追記ここまで>
該当のソースコード
文書1 と 文書2 があり、文書2の最終頁に文書1を結合するという内容となっております。
またこの内容に関しては、
トキドキドキンドットコム様
の記事を参考にさせていただいております。
'宣言部分 ここから Public Declare PtrSafe Function XDW_Finalize Lib "xdwapi.dll" (ByVal reservef As String) As Long Public Declare PtrSafe Function XDW_GetDocumentInformation Lib "xdwapi.dll" (ByVal handle As Long, ByRef pDocumentInfo As XDW_DOCUMENT_INFO) As Long Public Type XDW_DOCUMENT_INFO nSize As Long nPages As Long nVersion As Long nOriginalData As Long nDocType As Long nPermission As Long nShowAnnotations As Long nDocuments As Long nBinderColor As Long nBinderSize As Long End Type Public Declare PtrSafe Function XDW_OpenDocumentHandle Lib "xdwapi.dll" (ByVal lpszFilePath As String, ByRef pHandle As Long, ByRef pMode As XDW_OPEN_MODE) As Long Public Type XDW_OPEN_MODE nSize As Long nOption As Long End Type Public Declare PtrSafe Function XDW_CloseDocumentHandle Lib "xdwapi.dll" (ByVal handle As Long, ByVal reserved As String) As Long Public Declare PtrSafe Function XDW_InsertDocument Lib "xdwapi.dll" (ByVal handle As Long, nPage As Long, ByVal lpszOutputPath As String, ByVal reserved As String) As Long Public Declare PtrSafe Function XDW_SaveDocument Lib "xdwapi.dll" (ByVal handle As Long, ByVal reserved As String) As Long Public Declare PtrSafe Function XDW_GetInformation Lib "xdwapi.dll" (ByVal nIndex As Long, ByVal lpszOutput As String, ByVal nSize As Long, ByVal reserved As String) As Long '宣言部分 ここまで 'プロシージャ Sub TEST() Dim strFileName1, strFileName2 As String '--------- 'Docuworksを使うための準備 '--------- Dim lngHandle As Long Dim myMode As XDW_OPEN_MODE Dim myInfo As XDW_DOCUMENT_INFO 'XDW_OppenDocumentHandleを実行する際に必要になるmyModeに値を設定。 With myMode .nOption = 1 .nSize = LenB(myMode) End With 'XDW_GetDocumentInformationを実行する際に必要になるmyInfoに値を設定。 With myInfo .nSize = LenB(myInfo) End With '--------- '準備ここまで '--------- 'ファイルパスを指定 strFileName1 = "[絶対パス指定]\test1.xdw" strFileName2 = "[絶対パス指定]\test2.xdw" 'ShiftJisに変換 strFileName1 = StrConv(strFileName1, vbFromUnicode) strFileName2 = StrConv(strFileName2, vbFromUnicode) '<該当箇所 ここから> 'Docuworksファイルにアクセスするためのハンドルを得る。 '関数が正常に終了したら0を返し、異常の場合はエラーコードを返す。 api_result = Main.XDW_OpenDocumentHandle(strFileName2, lngHandle, myMode) '<該当箇所 ここまで> 'Docuworksファイル全体に関わる情報を得る。 Call Main.XDW_GetDocumentInformation(lngHandle, myInfo) '最終頁に挿入する。 Main.XDW_InsertDocument lngHandle, myInfo.nPages + 1, strFileName1, vbNullString 'Docuworksファイル全体に関わる情報を得る。※再度、最新の状態に Main.XDW_GetDocumentInformation lngHandle, myInfo '変更をDocuworksファイルに反映させる。 '正常に終了すれば0を、異常があればエラーコードを返す。 Call Main.XDW_SaveDocument(lngHandle, vbNullString) 'Docuworksファイルにアクセスするためのハンドルを開放する。 '関数が正常に終了したら0を返す。 Main.XDW_CloseDocumentHandle lngHandle, vbNullString End Sub
試したこと
冒頭宣言部の、Declareにおいて、PATHを絶対パスに書き換え。
C:\Windows\System32
の中に、
dwsdk910\XDWAPI\dllx64
内のファイルをすべて設置。
C:\Windows\SysWOW64
の中に、
dwsdk910\XDWAPI\dll
内のファイルをすべて設置。 ==> 効果なし。
なにとぞ、ご助力をよろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。