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

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

9083閲覧

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

Cimo

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/11/25 11:31

編集2021/11/25 14:21

やりたいこと・前提条件

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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で作業してはどうでしょうか。

投稿2021/11/30 05:29

FKD

総合スコア268

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問