忙しい現代人の腰&肩のお悩み対策!

Excelに入力されたデータをVBAでPDFのテキストフィールドへデータを自動で入力したいのですが、いろいろ探してみたものの、それらしきサンプル等もなく困窮しています。

例えばExcelに名前が100人登録されているとして、これを順番にPDFのテキストフィールドへ自動的に入力(更新)し、印刷する。(100人分が完了するまで)

といった感じの内容です。

まったくわかりませんので、どなたかお教え下さい。

もしサンプルコードが存在するようでしたらURLをお教えいただけると助かります。

宜しく御願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

既にPDFファイルが有って、そのテキストフィールドへ文字を流し込みたいのなら


PDFの編集が出来て、かつ、OLEオートメーションに対応したアプリケーションが無いと
VBAでは扱えないでしょう。

例えばAdobe Acrovat であれば
http://forums.adobe.com/message/3302881#3302881
に手を加えれば出来そうです。
※私はAdobe Acrovat を持ち合わせておりませんので検証不可です
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAでAcrobatを操作してテキスト抽出で詰まっています。

ExcelVBAからAcrobatを立ち上げPDFからテキストと、その座標情報を取得したいと考えております。

http://pdf-file.jugem.jp/
を参考にしてAcrobatを立ち上げJavaでテキストを抽出することはできましたが、その座標情報を得られず困っております。

Dim test As Variant
test = jso.getPageNthWordQuads(0, 1)

でtestには8つの値が配列で入るはずなのですがtest(0)にしか値は入っていません。
この値は妥当な値を得られているのですが、test(1)からは参照できません。

いろいろ調べて、VBAのvariantはVBのそれとは違う・・・のが原因ではというところで行き詰りここに書き込んでみることにしました。

VBAで同様なことをされている方がいましたらぜひよろしくお願いします。

Aベストアンサー

こんにちは。

>VBAで同様なことをされている方がいましたらぜひよろしくお願いします。
ふつうは、pdf に、テキストが入っているとは限らないし、プロテクトが掛かっていたら出来ませんので、印刷プロテクトが入っていないものなら、私は、OCR で取ってしまいます。それに、小さい規模なら、テキストが入っていれば、テキスト・コピーが利きます。

Acrobat 自体は分かりませんが、

test = jso.getPageNthWordQuads(0, 1)

もし、もともとが、配列があるとするなら、インデックス(添え字)を入れなければ、そのまま入るはずです。ただし、変数 test は、Variant 型で、配列の宣言をしないことが条件です。

そういうことではなくて、それぞれを取りたいなら、

jso.getPageNthWordQuads が、8つがどのような構造をしているかは分かりませんが、

座標は、二次限配列なのですから、

getPageNthWordQuads ([nPage],[nWord])

そのそれぞれのインデックスに、たぶん、0か、1 から、上限まで数字を入れれば出てくるはずです。

こんにちは。

>VBAで同様なことをされている方がいましたらぜひよろしくお願いします。
ふつうは、pdf に、テキストが入っているとは限らないし、プロテクトが掛かっていたら出来ませんので、印刷プロテクトが入っていないものなら、私は、OCR で取ってしまいます。それに、小さい規模なら、テキストが入っていれば、テキスト・コピーが利きます。

Acrobat 自体は分かりませんが、

test = jso.getPageNthWordQuads(0, 1)

もし、もともとが、配列があるとするなら、インデックス(添え字)を入れなけ...続きを読む

QエクセルVBAで、PDFファイルを開きたい

セルに入力した値のブック(xls)を開く場合、
以下となりますが、↓

Sub セルに入力したブック名のブックを開く()
ブック名 = Cells(1, 2) 'B1セルの値を取り出す
Workbooks.Open Filename:=ブック名 & ".xls" '指定されたブックを開く
End Sub


これでPDFファイルを開きたいです。
記述をどうしたらよいでしょうか。
目的はPDFファイルの検索/照会をxlsにてしたいのです。
お手数ですがお願いいたします。

Aベストアンサー

案1
ハイパーリンクにしてしまう。

案2
PDFファイルへのフルパスが、B列に記述してある
拡張子PDFへの関連付けがAcrobat Reader にしてある
と仮定して
ワークシートのイベントに

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If InStr(Target.Value, "pdf") > 0 Then
  Call Shell("explorer.exe " & Target.Value)
  Cancel = True '編集モードキャンセル
End If
End Sub
とか?

PDFファイルが一箇所にまとまっているのなら
標準モジュールに
Sub test2()
Dim strFilePath As String
strFilePath = _
  Application.GetOpenFilename _
  ("PDFファイル,*.pdf", MultiSelect:=False)

If strFilePath = "false" Then
 Exit Sub
End If

Call Shell("explorer.exe " & strFilePath)

End Sub
でも?
ということかな?

案1
ハイパーリンクにしてしまう。

案2
PDFファイルへのフルパスが、B列に記述してある
拡張子PDFへの関連付けがAcrobat Reader にしてある
と仮定して
ワークシートのイベントに

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If InStr(Target.Value, "pdf") > 0 Then
  Call Shell("explorer.exe " & Target.Value)
  Cancel = True '編集モードキャンセル
End If
End Sub
とか?

PDFファイルが一箇所にまとまっているのなら
標準モジュー...続きを読む

QVBでPDFファイルを編集する

VBでPDFファイルを結合したいのですが、どうしたらよいのか
わかりません。
ページ挿入で1つのファイルにまとめるという方法でも
どちらでもかまいません。
ご存知の方がいらっしゃいましたら、教えて下さい。

Aベストアンサー

使えそうなソースを見つけました。

参考URL:http://www.planetpdf.com/mainpage.asp?WebPageID=47

QVBからPDFファイルの埋め込みテキストを検索する方法

VBで文書を検索できるシステムを作っています。
通常検索では、テキストボックスに入力した文字列と一致するものをデータベースに登録した文書名から探してきてMSHFlexGridコントロール上に表示するようにしています。
今回は、追加検索として、指定したフォルダの中にあるPDFファイルやワードファイルなどの文書中の文字から一致するものを探して表示する機能を作りたいと考えています。
この様な機能はどの様に作れば良いのでしょうか?
色々とサイトを探してみたのですが、該当するものを見つけることが出来ませんでした。
よろしくお願いします。

Aベストアンサー

こんにちは。

[xdoc2txt]
PDF,WORD,EXCEL,一太郎などの各種バイナリ文書からテキストを抽出
http://www31.ocn.ne.jp/~h_ishida/xdoc2txt.html

VB から xdoc2txt.exe を起動して抽出テキストをリダイレクトする。
または、ActiveX 版 xdoc2txt.ocx を使うとか。

一から VB でとなると恐ろしく面倒で、難しいですよ。

まず速度面の問題があるでしょうし、ファイルフォーマットの解析が
必要になったり。。

QExcelでPDFファイルを利用する方法

いつもお世話になっております。

Excel2007ではアドインでPDFファイルを書き出すことができますが、逆に、PDFを読み込むことができないでしょうか。
ExcelVBAで、PDFファイルにあるテキストの表の値をワークシートにコピーしたいのですが、方法がわからず困っております。
どなたか、お助けいただけないでしょうか。

Aベストアンサー

Excel は PDF を読み込めませんので、PDF を開けるアプリケーション側から Excel に歩み寄っていく方向性がよろしいかと。

ちょっと実験してみました。
準備として Excel 2007 で表を作成し、PDF に出力したものを使いました。なので PDF の中の表に含まれる文字や数値は "文字" です。紙をスキャニングしたような "絵" ではありません。

この PDF を Adobe Acrobat 7.0 Standard で開き、テキスト選択モードにして表全体を選択。[右クリック] して [テーブルとしてコピー] をしました。
その状態で新規 Excel のシート上で [Ctrl]+[C] などで貼り付けをしてみると、見事に表がシートの上に展開されました。

また、Acrobat で [ファイル]-[名前を付けて保存] で保存形式を "Microsoft Word" にして保存し、そいつを Word で開いても表が再現されました。
ただ、ちょとだけセルがずれてましたけど。(表の左上のマスなど、何も文字が入らないマスがズレの原因になるようです)
Word の上に再現された表の全体をコピーして Excel のシートの上で [編集]-[形式を選択してコピー] をポイントし、"テキスト" の形式で張り付けてみるとズレてはいるものの割ときれいに表が張り付きました。(横軸のタイトル行が 1マスだけ左にずれました)

というような結果です。
最初のころにも書きましたが、PDF ファイルの中の表に含まれる文字や数値が 「人が見て文字や数字に見える」 てだけじゃなく、コンピュータ的にも文字や数値として判断できる状況じゃないとこの方法は無理です。表が書かれた紙資料をスキャニングして PDF 化した物からはできないです。
そういう場合は OCR などを使って先に "絵" を "文字" にする作業が必要かと思います。
私は Acrobat を使いこなしているわけでもないですし、手持ちは安い方の Standard Edition なので、もしかしたら上記の解決は Acrobat だけでも可能かもしれませんが。

Excel は PDF を読み込めませんので、PDF を開けるアプリケーション側から Excel に歩み寄っていく方向性がよろしいかと。

ちょっと実験してみました。
準備として Excel 2007 で表を作成し、PDF に出力したものを使いました。なので PDF の中の表に含まれる文字や数値は "文字" です。紙をスキャニングしたような "絵" ではありません。

この PDF を Adobe Acrobat 7.0 Standard で開き、テキスト選択モードにして表全体を選択。[右クリック] して [テーブルとしてコピー] をしました。
その状態で新規 E...続きを読む

QPDFファイルを開き、印刷し、閉じるマクロ

Excel 2003 VBAにて、
PDFファイルを開き、印刷し、閉じるマクロを作りたいと思っています。

Dim AA, AAA

AA = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe C:\Scan\20131101160734050_001.pdf"
AAA = Shell(AA, vbNormalFocus)

にて、PDFファイルを開くことは出来ました。
このPDFファイルを、「印刷し、閉じる」ためには、
このPDFファイルを指定する必要があると思いますが、
その構文が判りません。
知っている方、教えて下さい。

Aベストアンサー

#3です。
WShell.Execを使うと閉じる事ができる様ですが、色々と気難しくて苦労しました。
まず、なぜかAdobe Reader/Acrobatのフルパスを与えないと、ファイルがみつからないとゴネます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()
printPdf2 GetDesktopPath & "\test.pdf", "DocuWorks Printer", "DocuWorks Printer Driver"
' printPdf2 GetDesktopPath & "\test.pdf"
End Sub

Sub printPdf2(pdfDocument As String, Optional printerName As Variant, Optional printerDriver As Variant)
Dim cmdLine As String
Dim WShell As Object
Dim oExec As Object
'ここは調整の必要がありそう
Const waitTime As Long = 1000
'Windows7 Home 64bitの場合です
Const pgmFullPath As String = "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"

Set WShell = CreateObject("WScript.Shell")
If IsMissing(printerName) Or IsMissing(printerDriver) Then
cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"""
cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath)
cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument)
Else
cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"" ""printerName"" ""printerDriver"""
cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath)
cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument)
cmdLine = Replace(cmdLine, "printerName", printerName)
cmdLine = Replace(cmdLine, "printeDriver", printerDriver)
End If
Debug.Print cmdLine
Set oExec = WShell.exec(cmdLine)
Sleep waitTime
'Windows7Home/64bit環境ではここで実行時エラーが出るので無理矢理先に進めていますが
'Adobe Readerは閉じられる様です
On Error Resume Next
oExec.Terminate
Set WShell = Nothing
End Sub

Private Function GetDesktopPath() As String
Dim wScriptHost As Object, strInitDir As String
Set wScriptHost = CreateObject("Wscript.Shell")
GetDesktopPath = wScriptHost.SpecialFolders("Desktop")
Set wScriptHost = Nothing
End Function

Terminateで原因不明のエラーが出るのでWebを漁っいて下記をみつけました。64bit環境でエラーが出るのはこれも関係しているのでしょうか?少々無理をしている様なので、ご使用時はご注意下さい。
Terminate メソッドは最後の手段としてのみ使用します。これは、アプリケーションによっては適切にクリーンアップできない場合があるためです。通常は、プロセスを途中で中断せず、プロセス自身で実行を終了させるようにします。Terminate メソッドは WM_CLOSE メッセージを使ってプロセスを終了しようとします。これで終了できない場合は、通常のシャットダウン手順を実行せずに、プロセスを強制終了します。
http://msdn.microsoft.com/ja-jp/library/cc364387.aspx

#3です。
WShell.Execを使うと閉じる事ができる様ですが、色々と気難しくて苦労しました。
まず、なぜかAdobe Reader/Acrobatのフルパスを与えないと、ファイルがみつからないとゴネます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()
printPdf2 GetDesktopPath & "\test.pdf", "DocuWorks Printer", "DocuWorks Printer Driver"
' printPdf2 GetDesktopPath & "\test.pdf"
End Sub

Sub printPdf2(pdfDocument As String, Optional printerName As Variant, Optional prin...続きを読む

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QRange("A1")⇔cells(1,1)の変換。

EXCELのマクロについて質問します。
Range("A1")⇒(1,1)
cells(1,1)⇒("A1")
に一発変換する方法を教えて下さい。
時間があるかた宜しくお願いします。

Aベストアンサー

こんなのでよろしいでしょうか?
range("A1") → Range("A1").Row & "," & Range("A1").Column
cells(1,1) → Cells(1, 1).Address(False, False)
()や""は付けていません

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング