• ベストアンサー

VBでメールを起動させるには・・・

VBでメールを起動させたいのですが、現在のところShellを使って絶対パスで指定して起動させているのですが、それでは他の人が使った時にエラーがでてしまうので、相対パスの取得の仕方をおしえていただけないでしょうか?よろしくお願いします。

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

  • ベストアンサー
  • noppi_99
  • ベストアンサー率34% (10/29)
回答No.1

sub Command1_Click() Dim IE As Object Set IE = CreateObject("internetexplorer.application") IE.Visible = False IE.navigate ("mailto:アドレス?subject=件名&body=本文") End sub これでどうでしょう? 邪道かな・・・

tyakosan
質問者

お礼

出来ました。ありがとうございました。

その他の回答 (3)

回答No.4

新規メール作成の場合は、#1のnoppi_99さんと#3のtodo36さんが発言されているので、そちらをどうぞです。 もし標準メーラーの起動だけなら、、、 #2のparapaさんの言われている通り、レジストリから読み取るのがベストかと思います。 標準メーラーのレジストリは HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\ です。 [インターネットオプション]の[プログラム]タブの「電子メール」エリアは、この位置を利用します。 しかし、一般メーラソフトではここを利用しないで、新規メール作成のレジストリ HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mailto\shell\open\command だけを書き込むソフトも存在しています。(鶴亀メールなど) http://okweb.jp/kotaeru.php3?q=223163 http://okweb.jp/kotaeru.php3?q=350744 あとは標準メーラを取得できたら、起動をかけるだけでOKです。 サンプルは、インターネットオプションのレジストリ位置を利用しています。 Option Explicit Const DEF_MAIL     As String = "HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\" Const DEF_DMY      As String = "@MAIL@" Const DEF_MAIL_CMD   As String = DEF_MAIL & DEF_DMY & "\shell\open\command\" Sub Main()   Dim objShell  As Object   Dim strMail   As String   Dim strReg   As String   Dim strCmd   As String      Set objShell = CreateObject("WScript.Shell")      'メーラ取得   strMail = objShell.RegRead(DEF_MAIL)      'メーラ起動レジストリ位置を設定   strReg = Replace(DEF_MAIL_CMD, DEF_DMY, strMail)      'メーラのShellOpenコマンドを取得   strCmd = objShell.RegRead(strReg)      'メーラの起動   objShell.Run strCmd      Set objShell = Nothing End Sub

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

ShellExecuteの第3引数に mailto:~ を指定するとか。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=223163

  • parapa
  • ベストアンサー率15% (42/273)
回答No.2

ちょっと自身がないけど レジストリの HKEY_CLASSES_ROOT\mailto 以下がデフォルトのメーラに関する記述設定 だったと思う。 で、VBからレジストリ値を引っ張ってきて 使用するのは?

関連するQ&A

  • vb プログラムの起動と例外処理

    はじめまして プログラムの実行と例外処理に関して質問させていただきます。 現在,visual basic2005でプログラム(A)からvbで作成した別のプログラム(B)に引数を指定してから起動し,別のプログラム(B)が例外処理に関する方法を調べています。 プログラム(B)起動時に例外処理を用い,以下のようなエラーメッセージを表示させるにはどういった処理を構成すればよいでしょうか。 パス名が設定されていない場合,”ファイルのパス名が見つかりませんでした” 引数が指定されていない場合,”引数が指定されておりません” 原因が特定できないエラーが発生した場合,”原因不明のエラーが発生しました” プログラムの実行にはShellメソッドとSystem.Diagnostics.ProcessクラスのStartメソッドがあるという事がわかりましたが,上記2つのメソッドが自分の意図したい操作に適しているかまでは理解におよんでおりません。 まだプログラミングを始めたばかりという事もあり,右も左もわかりませんが,ご教授お願い致します。

  • VB6.0でエクセル保存する時の保存場所の指定。

    VB6.0からデータをエクセルに保存させようとしています。 保存する方法は、エクセルを開くのではなく、 ボタンを押したらそのまま自動で保存させるようにしています。 そしてその名前をつけて保存をさせる処理で、ファイルの保存場所を示す パスの指定で少々困っております。 EXEファイルがある位置をカレントとして同一フォルダ内にあるtestフォルダに 全てデータは保存したいと考えています。 絶対パスを固定で指定すればそこに保存できますが、それだと違うPC上で実行すると 動作しない危険性がありますので、相対パスで指定したいと思っています。 ですが、実行ファイルから"./test/test.xls"と指定してもパスのエラーとなり 保存できません。 しかし絶対パスの固定でフォルダを指定すると保存できます。 ws.Name = "C:\vb_test\test\test.xls" これをEXEファイルのある位置からの相対パスで指定するにはどうすればいいでしょうか?

  • 相対パスから絶対パスの取得

    相対パスを指定することにより、絶対パスを取得したいのですが・・・。 どうすればいいでしょうか? ■状況■ VB6.0 Windows2000 ひとつ上の階層に行きそこのTableフォルダ内のsample.htmlのパスを取得したい。 Dir$("..\Table\sample.html")としてみたのですができませんでした。

  • EXEのパス名を取得したいのですが・・・

    お世話になります。度々質問させていただいてますmmc820です。 現在、あるプログラムを作成しているのですが、VB上からEXEを起動させるのですが、この時にEXEのパス名を取得したいのです。 いろいろ調べてみましたが、なにぶん初心者で理解し切れません。 できるだけ簡単な方法があればと思い、質問させていただきました。 相対パスで指定できれば良いのですが、その方法すらわかりません。 どうか皆様のお知恵をお借りできないでしょうか? 開発環境はWindows2000、VB6.0です。宜しくお願いします。

  • VB6.0 パスが見つかりません

    いつもお世話になってます。 タイトルの通りで、過去の質問も見たんですが該当するものが無かったかと思われますので質問します。 VB6.0を使用してます。 PCAで実行し、サーバPCBにフォルダ・ファイル作成する処理なのですが、タイトルの「76:パスが見つかりません。」エラーが出て止まってしまいます。 PCBへのパスの渡し方ですが、Pathという名のフォルダを共有にして[\\PCB\Path\]として先月まで半年以上、稼動してました。 しかし最近になって急にエラーが出ています。 思い当たる節があるとすれば、1度IPアドレスでPCAからPCBへアドレス指定で飛んだことくらいです。 (\\12.345.678.90\Pathとして参照した) 時間指定で起動するよう設定していまして、10:00の時点でエラーが出た後、\\PCB\Pathで参照したあとに再度手動でexeを実行すると、今度はきちんと作動します。 ここからは余談ですが、解決策として3つの案が出てます。 (解決策といっても他にも改善することになり、新規として作ることになったのです。結局はパス指定するので…) 1.現在のを原因究明し、同様にコンピュータ名で指定する。 2.パス部分をIPで指定する。 3.ネットワークドライブに割り当てる(Z:\...など) 2.だとIPを変更した際にまたエラーになってしまうこと。 3.は起動時に1度は割り当てたドライブへアクセスすること。 として考えています。 長くなりましたが、まずは原因としてIPで指定したのがまずかったのでしょうか? そして解決するにはどのようにすればいいでしょうか。 ご教授願います。

  • VB5が起動しない

    VB起動時,vb5.exeアプリケーションエラーのメッセージボックスが表示され,強制終了してしまいます. どうしてでしょうか?

  • エクセルVBAで使うShell関数について

    現在、初心者ながらもエクセルを使って動画や音楽を検索して再生するソフトを作っています。 指定したファイルを、指定したアプリケーションで起動して開きたいと思い、ネットを使って調べたら2つの異なるShellの書き方で動かす方法が見つかりました。 2つのShell関数は同じものなのか教えて下さい。 (1) ret = Shell(Winamp_Path & "winamp.exe /ADD " & """" & Path) と、言う Shell(アプリケーションのフルパス/ADD""ファイルのフルパス) と書いてファイルをアプリケーションで開く方法。 (2) Call Shell(Path & oFile, vbNormalFocus) と、言う Shell(アプリケーションのフルパス, 起動時のウィンドウの状態) と書いてアプリケーションを起動する方法。 この2つは同じ種類のShell関数なのでしょうか。 (1)は、ファイルも一種のアプリケーションとして扱われているんでしょうか。 (2)がShell関数の基本型のようですが、(1)のような書き方が見つかってからは、他にも違う書き方があるかと思うと気になって仕方無いです。 使い方の違いは分かったのですが、調べても(2)の使い方や、別の関数や言語、APIを使ったアプリケーションの書き方しか見つからず、 エクセル2007VBのヘルプを見ても(2)の使い方しか見つからず、 Googleで、「エクセル Shell関数」と調べても、2つの違いが書かれている所が見つからなかったので質問しました。 ※この2つと違う、アプリケーションを起動するShellの記述があるなら、詳しくではなく、参考程度に教えて頂けると、とても嬉しいです。 頭の悪い質問だと思いますが、是非ともアドバイス、宜しくお願いします。

  • VB6.0で現在参照しているエクセルファイルの絶対パスを取得したい

    VB6.0で現在参照しているエクセルファイルの絶対パスを取得したい 環境:VB6.0/Excel2003/WindowsXP VB初心者です。 現在プログラム内で参照しているexcelファイルの絶対パスと、フォームのテキストボックスに入力された絶対パスを比較して、 それらが同一だった場合エラーを表示するというプログラムを作成しています。 プログラム内では、現在開かれているエクセルファイルの内容をチェックして、対象となるデータを持っているエクセルファイルを1つ選択し、データを取り込むという動きをしています。 現在開かれているファイルのパスと入力されたパスを比較する事は出来たのですが、 そうではなくデータを取り込んでいるエクセルファイルのみ比較したいのです。 (複数のファイルが開かれている場合、データを取り込んでいるファイルとは別のファイルのパスが入力されたファイルパスと同一だったときもエラーとなってしまうので..) データを取得しているところからはフルパスは取れそうにないので、ほかの方法を模索しています。 どうぞ宜しくお願い致します。

  • VB6でWSH(vbs)を起動できる方法を教えてください。

    visual Basic 6でアプリケーションを開発していますが、 このアプリケーション(exe)から、test.vbsを起動したいと考えています。 ====vbのコード===== 'ボタンクリックしたら、test.vbsが実行される Private Sub Command1_Click() shell("test.vbs") End Sub ==== test.vbs ==== MsgBox("test.vbs起動しました。") です。 上記のようにコードを書きましたが、Shell関数で 「実行時エラー'5' プロシージャの呼び出し、または引数が不正です。」 のメッセージが出力されて、vbsが起動できません。 VB6でWSH(vbs)を起動できる方法を教えてください。 環境は以下の通りです。 OS:WIN2000 アプリ:VB6 ブラウザ:IE5.0

  • VBからExcelが起動しません

    Excelファイルを開くプログラムをVBで作成したのですが 1つのパソコンだけ実行時エラー5が発生してExcelを起動できません どなたかお助けください プログラムはこんなかんじです WKPATH = "D:\Program Files\Microsoft Office\Office\EXCEL.EXE " & " c:\a.xls" exl = Shell(WKPATH, 1) ちなみにエラーが発生するパソコンはNT4.0sp6です

専門家に質問してみよう