Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12508 / 13646 ツリー ←次へ | 前へ→

【10123】PDFをExcelに戻す方法 ストレスアイラ 04/1/8(木) 11:21 質問
【10125】Re:PDFをExcelに戻す方法 INA 04/1/8(木) 14:15 回答
【10131】Re:PDFをExcelに戻す方法 Kein 04/1/8(木) 15:35 回答
【10173】Re:PDFをExcelに戻す方法 ストレスアイラ 04/1/9(金) 15:18 お礼

【10123】PDFをExcelに戻す方法
質問  ストレスアイラ  - 04/1/8(木) 11:21 -

引用なし
パスワード
   お世話になります。
数千ものPDFファイル(フォーマットも不定)をExcelファイルに戻す必要がある為、
(そもそもPDFを作成する元となったExcelファイルは紛失)
とりあえずはテキストに戻す方法(非VBA)を色々と試みたのですが、
多くの方法では、データが意図通りの順でテキスト化されず(各項目タイトルと値がセットで抽出されない)、
フォーマットが不定であることと合わせて考えると、とても使えそうに有りませんでした。

結局、調べた限りで一番有効そうだったのが、
Acrobat4.0の「表>書式付きテキスト選択ツール」で直接Excelシートにペーストすることだったのですが、
範囲選択にいちいちドラッグが必要な感じです。これをVBAで行う方法は無いでしょうか。
PDFの1シート全体を選択してコピーできればいいのですが。

または、何か別の案があったら教えていただけると幸いです。
Acrobatは4.0がベストですが、5.0、6.0もあります。

【10125】Re:PDFをExcelに戻す方法
回答  INA  - 04/1/8(木) 14:15 -

引用なし
パスワード
   >PDFの1シート全体を選択してコピーできればいいのですが。

ctrl + a で選択できませんか?

【10131】Re:PDFをExcelに戻す方法
回答  Kein  - 04/1/8(木) 15:35 -

引用なし
パスワード
   アクロバットにそんな機能があれば、より簡単にできるでしょうけど
私はリーダーしか持ってないのでリーダーを立ち上げて、SendKeysで
キーを送ってテキストを作りました。古くさいやり方かも知れませんが、
アクロバットでもリーダーでもショートカットキーが有効に働くので、
適当にインターバルを入れてやれば結構うまくいきますよ。一例ですが
こんなコードも考えられます。新規ブックへ入れてお試し下さい。

*Microsoft Forms 2.0 Object Library に参照設定する

Sub Test_PDF_Copy()
  Static i As Integer
  Dim MyF As String, NewF As String, Buf As String
  Dim Ret As Long
  Dim DObj As New DataObject
  Dim Ary As Variant
  Const Acbat As String = _
  "C:\Program Files\Adobe\Acrobat 5.0\Reader\AcroRd32.exe"
 
  If i = Worksheets.Count Then i = 0
  ChDir "C:\My Documents" 'PDFファイルの保存先フォルダーに変更
  With Application
   MyF = .GetOpenFilename("PDFファイル(*.pdf),*.pdf")
   If MyF = "False" Then GoTo EndLine
   i = i + 1: NewF = Left(Dir(MyF), Len(Dir(MyF)) - 3) & "xls"
   Worksheets(i).Cells.ClearContents
   Ret = Shell(Acbat & " " & MyF, 1)
   .Wait Time + TimeValue("00:00:02")
   SendKeys "^(a)"
   .Wait Time + TimeValue("00:00:01")
   SendKeys "^(c)"
   .Wait Time + TimeValue("00:00:01")
   DObj.GetFromClipboard
   Buf = DObj.GetText(1)
   Ary = .WorksheetFunction.Transpose(Split(Buf, ChR(10)))
   .ScreenUpdating = False
   With ThisWorkbook.Worksheets(i)
     .Range("A1").Resize(UBound(Ary) + 1).Value = Ary
     .Copy
   End With
   ActiveWorkbook.Close True, .DefaultFilePath & "\" & NewF
   .ScreenUpdating = True: Erase Ary 
   AppActivate Ret
   .Wait Time + TimeValue("00:00:01")
   SendKeys "^(q)"
EndLine:
   .CutCopyMode = False
   ChDir .DefaultFilePath
  End With
End Sub

【10173】Re:PDFをExcelに戻す方法
お礼  ストレスアイラ  - 04/1/9(金) 15:18 -

引用なし
パスワード
   ご返答、どうもありがとうございました。

▼Kein さん:
「Split」で"Subまたはファンクションが定義されていません"エラーになってしまいます。
Excelのバージョンのせいでしょうか・・・(97です)
代替案がわからなかったので、単純にペーストにして実行したところExcelシートに取り出せましたが、やはりテキスト形式で、
仕様がバラバラ過ぎることから、残念ながら扱いきれそうにありません・・・
INAさんに指摘して頂いた方法も、確かに選択してコピペには繋げられますが、
表に近い形であるせいか、同様に、その後の処理がちょっとできないなあ、といった感じです。
項目内容も項目数もファイルごとに違って、頼りになるのは見た目上の縦横の並びだけなんです。

やはり今の時点で把握してるところでは、頼りは「表・書式付きテキスト選択ツール」のみ(リーダーには付いてないようですね・・・)なので、
これがなんとかなれば・・・ですが、難しそうです。
そのツール自体、マウスを使わないと確実には選べない感じですし(同種の4ツールのショートカットキーが全て一緒なので)
ページ上でドラッグしないといけないので。

良い方法はなかなかなさそうですが、とにかく考えていただいて感謝です。
一旦〆めます。

12508 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free