エクセル2010でPDFを開く方法

このQ&Aのポイント
  • エクセル2010のVBAを使用してPDFを開く方法について
  • エクセルのワークシートにPDFファイルを挿入し、ボタンを使って開こうとしているが、アクティブにならず表示されない問題
  • PDFではなくワード文書を張り付けた場合はアクティブになるが、PDFはアクティブにならず表に表示されない
回答を見る
  • ベストアンサー

エクセル2010のVBAでPDFを開きたい

エクセルのワークシートSheet2にPDFのファイルを挿入しました。アイコン表示になっています。 Sheet1にあるボタンでこのPDFを開こうと思い、見よう見まねで Sub TEST() Worksheets("Sheet2").OLEObjects(1).Verb Verb:=xlPrimary End Sub としたところ、PDFは開くことはひらくのですがアクティブになってくれません。 Worksheets("Sheet2").OLEObjects(1).Activate に変えてもおなじです。 PDFではなくワード文書を張り付けた時には上記のコードでアクティブになってくれたのですが。 どうすればPDFをアクティブに、表に見えるようにできるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんにちは。 今、余裕ないので簡単なレスしか出来ませんが、 > Worksheets("Sheet2").OLEObjects(1).Verb Verb:=xlPrimary 正確には、  Worksheets("Sheet2").OLEObjects(1).Verb Verb:=xlVerbPrimary なのですが、私を含めて不正確な記述が多いんですよね。 この、不正確な"Enum=列挙体 の扱い"が、 ユーザーによる自己解決を遠ざけている (という事例は、マクロの記録やMSDNのドキュメント等含め、 信頼を寄せるQA回答者さんでさえ誤用している例が多数あり) 割とよくある残念なケースに当たります。 xlPrimary = 1 xlVerbPrimary = 1 なので、間違いではないのですが、 同値の似た定数を使用することで、本来の OLEObject.Verb メソッド の引数Verbに求められるところの、  XlOLEVerb 列挙   xlVerbOpen   xlVerbPrimary に辿り着くことが解り難くなってしまっている、という、、、。  Worksheets("Sheet2").OLEObjects(1).Verb Verb:=xlVerbOpen が直接の回答になります。 あるいは、 > エクセルのワークシートSheet2にPDFのファイルを挿入しました。アイコン表示になっています。 オブジェクトの挿入の際、[リンク]にチェックを入れておけば、 ご提示のままの記述でも、PDF(Adobe Acrobat Reader かな?)は アクティブになる筈です。 今後のこととして、 ご提示の記述内の、".Verb"の部分をクリックして、 キャレット(カーソル)を当てた状態で[F1]キーを押して、 VBAのヘルプを表示させることを試す習慣をつけるようにしてみて下さい。 今回の回答に至った私とて、すべてを記憶している訳ではなく、 ヘルプやオブジェクトブラウザをあたることをきっかけにして、 過去のコンテンツを調べ直しているだけですので。 今回は、以上になります。

emaxemax
質問者

お礼

Verb:=xlVerbOpen これで解決しました! ありがとうございます。 これで月曜日、安心して会社に行けます!

その他の回答 (1)

回答No.2

念の為、追記しますが、 対象のPDFファイルが既に開いている場合には、 回答No.1に記した方法では、 対象ファイルを、Activate(最前面表示)出来ません。 > ... PDFを開こうと ... という要求にのみ応えたものですので、ご了承を。

emaxemax
質問者

お礼

はい、ご丁寧にありがとうございます。 いずれはそのような画面の切り替えまでやってみようとは思いますが今回はこれで解決しました。

関連するQ&A

  • エクセルVBAでワード文書をPDF保存

    質問の仕方が悪かったようですので先日の質問 https://okwave.jp/qa/q9876787.html を取り消し、再度質問させていただきます。 エクセル2016のワークシート上にオブジェクトの挿入でワードの文書ファイルをアイコンで貼り付けています。VBAでこの文書ファイルを開き、PDFとして保存しようと思います。 見よう見まねで以下のようなコードを書いてみまた。 '参照設定 Microsoft Word 16.0 Object Library Sub test01() Dim objWord As Word.Application Set objWord = CreateObject("Word.Application") objWord.Visible = True Dim objDoc As Word.Document Dim FileName As String FileName = Application.GetSaveAsFilename(, "PDFファイル,*.pdf", , "PDF保存") Set objDoc = Worksheets("Sheet1").OLEObjects(1).Verb(Verb:=xlVerbOpen) objDoc.ExportAsFixedFormat OutputFileName:=FileName, ExportFormat:=wdExportFormatPDF objDoc.Close End Sub これで、文書ファイルは開くのですが、「オブジェクトが必要です」のエラーがでて、Set objDocがEmptyのままPDF保存ができません。どのように直せばいいのでしょうか? ご教示ください。

  • エクセルVBAでワークシート上のPDFをPrint

    https://okwave.jp/qa/q9367116.html の関連質問です。 Worksheets("Sheet2").OLEObjects(1).Verb Verb:=xlVerbOpen で、ワークシート上に埋め込んだPDFファイルを開くことはできました。 今度は、これで開いたPDFを手動ではなく自動でPrintし、Acrobatを終了させる方法があれば知りたいのです。 欲張ってすみません。よろしくお願いします。

  • ワークシート上のPDFファイルをVBAで印刷したい

    エクセル2010です。 Worksheets("Sheet2").OLEObjects(1).Verb Verb:=xlVerbOpen で、エクセルのワークシート上に埋め込んだPDFファイルを開くことはできました。 これで開いたPDFを手動ではなく自動でPrintし、Acrobatを終了させる方法があれば知りたいのです。 なお、残念ながら有料のAcrobatはありません。

  • エクセルに埋め込んだPDFの実行時エラー1004

    エクセル2000です。 エクセルのBOOK内の非表示のワークシートにPDFドキュメントをアイコンの形で貼り付けてあります。 エクセル2000です。 エクセルで作成した文書のワークシート上に、「挿入」→「オブジェクト」→「ファイルから」で、PDFのドキュメントをアイコンの形で「埋め込みオブジェクト」にしました。 このシートは非表示に設定してあります。 表示されたシートにボタンを設置し、 Sub Test01  Sheets("Sheet3").Shapes("Object 4").OLEFormat.Verb  Sheets("Sheet1").Activate End Sub として、PDFを起動させるようにしています。 これでわたしの端末や近くの同僚の端末(2000および2007)ではボタンを押せばPDFが立ち上がり、ドキュメントを閲覧、印刷(これは手動)ができます。 PDFを閉じるとSheet1に戻ります。 ところが、別の同僚の端末(2000)で試すと、 「実行時エラー1004 このオブジェクトの作成元アプリケーションを起動できません」 というエラーになります。 エラーメッセージの「終了ボタン」を押し、再度ボタンを押してみると、今度はちゃんと立ち上がります。 PDFを閉じてからまたボタンを押すと、同じエラーがでます。 変だと思い、エラーメッセージを終了させタスクバーを見ると、なんとPDFの表示があり、そこをクリックするとちゃんとドキュメントが立ち上がっていました。 どうもエラーメッセージで画面がPDFに切り替わってくれないようです。 Sheets("Sheet3").Shapes("Object 4").OLEFormat.Verbの前にOn Error Resume Nextを入れたところ、エラーメッセージは出なくなりましたが、やはり画面は切り替わりません。 タスクバーにはあるのでそこをクリックすれば見れますが、画面が切り替わらないのは不便です。 どのように対処すればよいのでしょうか?

  • VBA どうしてなのでしょうか?

    どうしてなのかまったくわかりません… Sub test() Dim TW As Worksheet Set TW = Worksheets("Sheet2") TW.Activate Range("G5").Activate End Sub は良いのに Sub test() Dim TW As Worksheet Set TW = Worksheets("Sheet2") TW.Range("G5").Activate End Sub はエラーがでます… この理由をご存知の方いらっしゃいますか?? よかったら教えていただけませんか?

  • エクセルVBAでSheet1.ActivateとSheet(n).Activate

    エクセル2000です。 VBAでの疑問点を教えてください。 Sub test1() Sheet1.Activate MsgBox ActiveSheet.Name End Sub これは問題なく作動します。 Sub test2() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheet(n).Activate MsgBox ActiveSheet.Name Next End Sub これは「SubまたはFunctionがていぎされていません」というエラーになります。 もちろん、 Sub test3() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets(n).Activate MsgBox ActiveSheet.Name Next End Sub のように書けばOKなのは存じておりますが、これではSheet名に係らず、左から順番となってしまいます。 Sub test4() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets("Sheet" & n).Activate MsgBox ActiveSheet.Name Next End Sub のように明確にシート名として記述すればOKなのですが、それでは、Test1のSheet1.Activate が通って、Sheet(n).Activate が通らないのはなぜでしょう? しょうもない質問でごめんさない。

  • VBAのActivateとSelectって

    何が違うのでしょう? Sub test_Activate() Sheet1.Activate End Sub Sub test_Select() Sheet1.Select End Sub をテストしてみましたが 違いが判りません。

  • エクセルVBAで SendKeys "{TAB}"

    エクセル2000です。 一つのブックに何枚かシートがあります。 各シートは保護されており、いくつかロックされていないセルがあります。 各シートの最初のロックされていないセル(シートにより異なります)にカーソルを飛ばしたいのですが、下記のようにやってもセルA1が選択されたままで飛んでくれません。 どこが悪いのでしょうか? Sub TEST() Dim sh As Worksheet For Each sh In Worksheets sh.Activate sh.Cells(1, 1).Activate SendKeys "{TAB}" MsgBox ActiveCell.Address Next End Sub なお、 sh.EnableSelection = xlUnlockedCells を挿入すればSendKeys "{TAB}"がなくとも、カーソルが飛びますが、今回はEnableSelection = xlUnlockedCellsしたくないのです。 よろしくおねがいします。

  • Excel VBAでの初期設定

    Excel VBA 初心者です。Excelは2013です。VBAでBookを開いたときにあるシートの初期設定をしたいと考えています。Activateイベントを使おうと思いましたがイベントが発生しないことがあるため質問しています。 例として以下のようなコードを記述したとき、sheet1以外を開いて保存している場合にはActivateイベントは発生しますが、sheet1を開いて保存している場合にはイベントが発生しないため初期設定の処理ができませんでした。 対応方法をお分かりの方ご教授いただけないでしょうか。 ============================= '"以下をThisWorkbook"に記述 Private Sub Workbook_Open() '②Worksheets("sheet2").Activate も入れれば Activateイベントは発生する Worksheets("sheet1").Activate '①もともと sheet1がActiveで保存されていた場合、Activateイベントは発生しなかった End Sub ============================= '"以下をsheet1"に記述 Private Sub Worksheet_Activate() '初期設定処理 MsgBox "sheet1の初期設定をしました" End Sub ============================= 宜しくお願いします。

  • EXCEL マクロ 

    お世話になります。 マクロは初心者です。 セルの数値を参照して、シートをアクティブにしたいのですが 下記のような繰り返しでシートが30ぐらいあるので、簡単な 表現に出来ないでしょうか。 宜しくお願いします。 Private Sub Workbook_Open() If 0 <= Worksheets(4).Range("M1") < 7 Then Worksheets(4).Activate End If If 0 <= Worksheets(5).Range("M1") < 7 Then Worksheets(5).Activate End If If 0 <= Worksheets(6).Range("M1") < 7 Then Worksheets(6).Activate End If If 0 <= Worksheets(7).Range("M1") < 7 Then Worksheets(7).Activate End If If 0 <= Worksheets(8).Range("M1") < 7 Then Worksheets(8).Activate End If If 0 <= Worksheets(9).Range("M1") < 7 Then Worksheets(9).Activate End If End Sub

専門家に質問してみよう