質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.36%

Docuworks APIをEXCEL VBAから利用する方法。

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 101

score 0

やりたいこと・前提条件

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
内のファイルをすべて設置。 ==> 効果なし。

なにとぞ、ご助力をよろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

(遅レスなので解決済みかもしれませんが、目についたので・・・)
API使った事ないですが、Docuworks9と9.1は別製品だったと思うので、
9.1用のAPIをダウンロードして動作環境を見てみました。(以下引用)

2-1. XDWAPIの動作環境
(1) XDWAPI 9.1 を使用するには、DocuWorks 9.1 商品版のバージョン9.1 (以降)がインストールされている環境が必要です。
(2) XDWAPI 9.1 は、DocuWorks 9 商品版及びそれ以前のバージョンがインストールされている環境では動作しませんので、dllファイルをコピーしないで下さい。
(3) XDWAPI .NETを使用するには、Microsoft(R) .NET Framework 3.5以降がインストールされている必要があります。

との事ですので、9用のAPIで作業してはどうでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.36%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る