Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
アプリケーション名の調べ方について
投稿日時: 24/01/25 17:23:24
投稿者: ひろと

前提
シートのA列に、フルパス表示で.pptファイルを表示するようにしています
シートのコードネームをwsPowerPoint(=wsの後にアプリケーション名)にしています
 
発生すること
この時、以下のワークシートイベントで、PowerPointで.pptファイルを開くことが出来ます。
 
やりたいこと
PowerPointの例のようにググれば簡単にアプリケーション名が分かるものは良いのですが、ググっても出てこないようなアプリケーションの場合、自分でアプリケーション名を調べるにはどうすればいいでしょうか?
Foxit Readerと言うアプリケーションでpdfを開けるようにしたいです。
 
 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Target(1, 1).Column <> Columns("A").Column Then
  Exit Sub
 End If
 ブック = Target(1, 1).Value
 On Error Resume Next
  自身 = ActiveSheet.CodeName
  
  アプリ名 = Mid(自身, 3)
  Set アプリ = GetObject(, アプリ名 & ".Application")
  If Err.Number <> 0 Then
   Set アプリ = CreateObject(Class:=アプリ名 & ".Application")
   On Error GoTo 0
  End If
  アプリ.Visible = True
  アプリ.Activate
  アプリ.Presentations.Open ブック
  If Err.Number <> 0 Then
   〜エラー処理〜
   On Error GoTo 0
   Exit Sub
  End If
 On Error GoTo 0
  Set アプリ = Nothing
Cancel = True
End Sub

回答
投稿日時: 24/01/26 10:35:42
投稿者: WinArrow

OSには、ファイルの拡張子に対応したアプリケーションを起動する機能が備わっています。
ファイルをダブルクリックすると、対応するアプリが起動する機能のことでdす。
 
それは、拡張子:pdfが対応するアプリに対応付けられているからです。
その対応関係は変更することができます。
但し、特定ファイルだけということではないです。
 
対応関係を変更する方法は、
「既定のアプリを変更してファイルの拡張子と関連付けする方法」
のようなキーワードで検索してみてください。
 
 

回答
投稿日時: 24/01/26 11:14:01
投稿者: WinArrow

追加レス
 
拡張子とアプリの対応関係を使って、
ファイルパスを指定しただけで、自動でアプリを起動できます。
 
参考コード

Sub Wsh_Run2()

  Dim objWSH As Object
  Set objWSH = CreateObject("Wscript.Shell")

  objWSH.Run "D:\test\サンプル.txt"

  Set objWSH = Nothing

End Sub

回答
投稿日時: 24/01/26 12:37:55
投稿者: Suzu

何が問題であるのか質問文から読み切れないのですが
 
 
だいたいのアプリケーションは、
 
Windowsキー + R で表示される 「ファイル名を指定して実行」において
 
exeファイル名[半角空き]"開きたいファイルフルパス"
 
exeファイルのパスが通っていない場合には
"exeファイルフルパス"[半角空き]"開きたいファイルフルパス"
となります。
 
 
上記を行えばファイルパスを指定したファイルが
exeファイルのアプリケーションにて開くことが出来る形式であれば
開くことができます。
 
 

引用:
Foxit Readerと言うアプリケーションでpdfを開けるようにしたいです。

 
Acrobat にて開くなら
 
Sub Sample()
  Dim wsh As Object
 
  Set wsh = CreateObject("WScript.Shell")
  wsh.Exec """C:\Program Files\Adobe\Acrobat DC\Acrobat\Acrobat.exe"" ""C:\PDFファイルフルパス.pdf"""
End Sub
 
の様にすれば可能ですから
 
pdfファイル を Foxit Reader にて開きたいなら
ファイルフルパスのファイル拡張子 が pdf である事を確認し、上記を利用します。

回答
投稿日時: 24/01/26 14:03:08
投稿者: simple

いわゆるProgIDのことを言っているのでしょうか。
レジストリ−に登録されているという記事がありました。ネットで検索してみてください。
 
ProgIDの一覧を取得するには下記が参考になるかもしれません。
https://www.itlab51.com/?p=6007

回答
投稿日時: 24/01/26 17:13:46
投稿者: simple

> Foxit Readerと言うアプリケーションでpdfを開けるようにしたいです。

それとCOMオブジェクトは何か関係するんですか?
Foxit Readerと言うアプリケーションは、PDFを扱うCOMオブジェクトを作成できるんですか?
 
できなければ、単にFoxit Readerをファイル名を引数にして起動するコードを書くほかないと
思います。
Suzuさんがご指摘になったとおりでしょう。

投稿日時: 24/01/26 17:42:17
投稿者: ひろと

皆様
 
最初に知ったのがGetObject(, アプリ名 & ".Application")を使う方法だったので、CreateObject("Wscript.Shell")を使うとこんなに簡単に出来るのを知りませんでした。
ありがとうございました。
ところで開きたいファイル名に半角スペースがあると、エラーが出るようなので、何らかの対策をしようと思います。
 
ProgIDは、レジストリを調べてみましたが、Foxit Readerのを上手に調べることは出来ませんでした(ProgIDという名前だということは知りませんでした)。
また、COMオブジェクトについては、さっぱり分からないので、私には早いようです。

回答
投稿日時: 24/01/26 20:26:00
投稿者: WinArrow

引用:

ところで開きたいファイル名に半角スペースがあると、エラーが出るようなので、何らかの対策をしようと思います。

 
suzu さんのレスの中にヒントがあります。

回答
投稿日時: 24/01/27 09:31:49
投稿者: RIGEL

インストールするとVBEの参照設定のライブラリファイル一覧に
それっぽいものが登録されるようになるはずです。
 
自分も Foxit Reader を利用しています。
参照設定を見ると
FoxitReader 1,0 Type Library
このような感じのライブラリが登録されています。
ただし、無料版だと何もできない模様です。
恐らく有償版において機能が活性化されるものかと想像できます。
 
試していませんが
メーカーサイトにはトライアル版なるものが存在していますので
チャレンジしてみるのも一考です(それによる不具合が発生しても責任は持てませんが...)

回答
投稿日時: 24/01/27 11:17:33
投稿者: WinArrow

>Foxit Reader
は、PDFの閲覧のアプリですよね?
  
別に、Foxit Editor
という編集アプリがあるようですね。
  
私は、Adobe ReaderDC (無料アプリ)に、拡張子:pdfを関連付けして使用しています。
ExcelVBAから、PDFファイルを開く場合は、
wsh.Run を使っています。
  
セルに設定したハイパーリンクでも、開くことができるので、
難しく考えることはないと思います。
  
一時期、拡張子:Pdfが Microsoft Edgeに関連付けされてしまい、大変困ったことがありました。
 
質問者さんの環境では、PDFファイルをダブルクリックした場合、
どのようなアプリが開くのでしょうか?

回答
投稿日時: 24/01/27 23:04:08
投稿者: MMYS

ひろと さんの引用:

Foxit Readerと言うアプリケーションでpdfを開けるようにしたいです。

ひろと さんの引用:

最初に知ったのがGetObject(, アプリ名 & ".Application")を使う方法だったので、CreateObject("Wscript.Shell")を使うとこんなに簡単に出来るのを知りませんでした。

まず、CreateObject、CreateObjectのほうが、特殊で、ほとんどのアプリは対応していません。一応、ほかの方のレスの通り、Foxit Readerは有償で使用できるみたいですが。
 
現在、Windowsでアプリの起動は、スタートボタンで起動やディスクトップのアイコンで起動するのが一般的ですが、本来は、コマンドラインからの「実行ファイル パラメータ」を指定しで起動です。
Foxit Readerもコマンドラインでのパラメータ付きでの起動が可能です。
 
たとえば、下記でFoxit Readerをコマンドラインから起動が書かれております。
https://www.lifedesignedit.com/use_foxit_pdf_command_line_options
引用:

"C:\Program Files (x86)\Foxit Software\Foxit J-Reader\Foxit Reader.exe" "D:\sample.pdf" /pwd yourpassword /A page=5 zoom=50

これを「コマンドプロンプト」または「ファイル名を指定して実行」で入力すれば、「Foxit Reader」を起動して、指定されたパラメータでPDFファイルが開きます。意味は、下記の通り
 
Foxit Reader.exe を起動(フルパス)
パラメータとして
・"D:\ksample.pdf"
・/pwd yourpassword
・/A page=5 zoom=50
を指定。
 
パラメータの意味は
・"D:\sample.pdf"を開く
・pdfのパスワード
・5頁を開く
・表示倍率50%
 
※コマンドの意味は下記PDFの226頁にかかれています。
https://www.foxit.co.jp/wp-content/uploads/FoxitReader82_UserManual.pdf
 
※実行ファイル名およびインストールパスに注意。上記のままでは動きません。
 
 
動作を確認したら、あとはこの動作を、VBAで再現すれば良いだけ。
やり方は、すでにSuzuさんがサンプルを提示されております。
 
もちろん、ほかの方のレスの通り、Foxit Readerが関連付けされていれば、もっと簡単にFoxit Readerで開けます。
 
 
 
ところで、下記は放置ですか。
https://www.moug.net/faq/viewtopic.php?t=82386
 
 

回答
投稿日時: 24/01/28 10:36:12
投稿者: WinArrow

最初に戻ってしまいますが、
 
「セルをダブルクリックして、セルに入力してあるファイルを開きたい」
が主目的ですよね?
 
その時、ファイル(正確には拡張子)に対応する以外のアプリで開く
というのが、条件ですよね?
 
当該ファイルだけということなのか?
当該ファイルの拡張子全部のファイルにアプリを対応させるか?
で、解決策が異なります。
 
 
どちらの場合でも、これまでのレスの中にヒントがあるので、
解決できるとは思います。
 
拡張子:pdfに対応するアプリを、「Foxit Reader」に変更する
ということならば、セルにHYPERLINK関数を入力し、
当該セルをクリックするだけで、ファイルを開くことができます。
ややこしいVBAは必要ありません。
今後のメンテナンス負荷は、限りなくゼロになると思います。
もう一つの懸念は、
このExcelファイルを他のPCでも使用するという条件があるならば、
使用する全部のPC(今後、リプレースするPCを含む)に「Foxit Reader」をインストールし、
拡張子対応の変更が必要になります。
 
今後のことも考えて、決めてくださいね・・・・・
 
 
 
 
 

回答
投稿日時: 24/01/29 12:08:37
投稿者: Suzu

ひろと さんの引用:
ところで開きたいファイル名に半角スペースがあると、エラーが出るようなので、何らかの対策をしようと思います。

 
 
ファイル名を指定して実行 または コマンドライン にて実行する際
 
一番確実なのは
"exeファイルフルパス"[半角空き]"開きたいファイルフルパス"
 
の様に、
EXEファイルフルパス と、開きたいファイル それぞれを 「"」で括る事です。
これを行うことで、半角スペースが含まれているパスにも対応可能になります。
 
 
これを、VBA にて実行する場合
 
もともと、
wsh.Exec "exeファイルパス[半角スペース]pdfファイルフルパス"
にて可能ですが、
 
先の様に パス に半角スペースが含まれている場合
wsh.Exec """exeファイルフルパス""[半角スペース]""PDFファイルフルパス"""
の様にする必要があります。
 
これは、VBAの文法で、文字列の中で、「"」を表す為には、「""」の様に、「"」を二つ重ねます。
ですので、
wsh.Exec """C:\Program Files\Adobe\Acrobat DC\Acrobat\Acrobat.exe"" ""C:\PDFファイルフルパス.pdf"""
の様になる次第です。

投稿日時: 24/01/30 09:31:34
投稿者: ひろと

皆様
 
詳細に色々とありがとうございます。
 
私はこのエクセルを使う予定のPC全てでpdfをFoxitReaderに関連付けているため、exeファイルパスをSelect Caseで分岐指定して、wsh.Execのファイルパス半角対応をファイル = Replace(Target, " ", """ """)等すれば何とかなりそうです。
 
Hyperlink関数を使わないのが、ダブルクリックでファイルを、右クリックでそのファイルのあるフォルダを開きたいからというのが理由です。
 
これから何かするときはコマンドラインの内容はVBAでほぼそのままできると思って取り組もうと思います。
ありがとうございました。

投稿日時: 24/01/30 09:33:00
投稿者: ひろと

解決済みです