電子書籍の厳選無料作品が豊富!

エクセルのワークシートから、メニューの、「ファイル」、「送信」、「あて先」で現在のシート記載事項をメール本文として送信できますが、その際、ワークシート上のオブジェクトを自動で削除するためにはどうしたらよいでしょうか?

やりたいことは、ワークシート上のドロップダウン等で選んだ定型の文言(ドロップダウン操作により、自動的にシート上に表示されます。)だけを任意のアドレスにメール送信したいということです。現状ではドロップダウン自体やボタンまでメールに添付され、手動で削除しなくてはなりません。

A 回答 (5件)

>「ファイル」、「送信」、「あて先」で現在のシート記載事項をメール本文


> として送信すると同じように...

参考URL: http://oshiete1.goo.ne.jp/kotaeru.php3?q=1546306

参考URLのスレによると、この機能が使えるかどうかは環境依存するようです。
ご自分の PC でだけ使用する前提ですか?

消極的な逃げの手段になりますが、こんな感じでは?.....

Sub Sample()
  
  If Application.MailSystem <> xlMAPI Then
    MsgBox "この機能を使用するためには MAPI対応のメーラーが必要です。", vbCritical
   Else
    ' Copy 完了後 Activesheet は新規ブックの方に変わります
    ActiveSheet.Copy
    ' ここで不要なものを削除するなど必要な処理を行う
    With ActiveSheet
      ' コントロールやシェープ等の削除
      .DrawingObjects.Delete
      ' 入力規則の削除
      .Cells.Validation.Delete
      ' A 列の削除
      .Columns(1).Delete
    End With
    ' 念のため
    ActiveWindow.Activate
    ' 逃げの一手... [メール宛先] ショートカットキー送信
    SendKeys "%FDM", True
  End If

End Sub

調べた限り、VBA からこの機能を呼び出すことはできないみたいです。
    • good
    • 0
この回答へのお礼

いつもお世話になります。
ありがとうございます、やりたいことが実現できました。

ただ、メール送信後にActiveSheet.Copyで出来たあたらしいbookが残ってしまうのですが、これを自動削除する方法はないでしょうか?手動で保存せずに終了すればいいだけのことなのですが、せっかくここまでできたら欲がでてしまいます。(^^;;

お礼日時:2006/06/16 18:48

遅くなりました。



> 最初に教えていただいた、ブック添付の方は「件名」を指定でき
> ましたが、こっちのやりかたでは多分これも無理ですね?

PostMessage でなんとか件名を送信する方法がないか、あれこれ
試してみましたが、件名を入力するコントロールがどうしても捉まえ
られず断念しました... (´・ω・`)

Excel に準備されている「メールの宛先」機能を使う以上、無理そう
ですね。

もともと、この機能自体が環境依存するので、汎用性がないです。
OUTLOOK やメール送信の外部コンポーネントを利用する方法を考えて
みて下さい。

Excel から Outlook を使って HTMLメールを送信するサンプルなら
WEB 検索でヒットします。
    • good
    • 0
この回答へのお礼

ありがとうございました。
おなじエクセルもOutLookも同じOfficeのソフトなので可能かなあと思いましたが、VBAの方法は断念いたします。

お礼日時:2006/06/20 10:08

あ、、#3 の方法じゃダメですね。



それと別に新規ブックでなくても、ThisWorkbook 内に複製しても良かったかも?

ただ、この一時的な作業シート(ブック)はユーザーの送信等の操作があって
から削除を行う必要があるわけですから、「選択範囲を送信」ボタンのクリック
を検知しなければなりません。

VBA では難しいですね。。

Excel のツールバーに表示されるメール送信機能を使う以上は、恐らく、不可能
だと思います。
    • good
    • 0
この回答へのお礼

VBAでは無理ということですね。
わかりました、あきらめます。

あと、最初に教えていただいた、ブック添付の方は「件名」を指定できましたが、こっちのやりかたでは多分これも無理ですね?

お礼日時:2006/06/17 18:44

> これを自動削除する方法はないでしょうか?



ん?

merlionXX さんならできると思います。こんな感じのコードを付け足す
だけですよ。

Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
ThisWorkbook.Activate

っていうか、、苦し紛れの SendKeys で逃げて済みません。m(__;)m
    • good
    • 0

こんにちは。

KenKen_SP です。

Excel の SendMail メソッドを使って?

同一ブックでやろうとすると難しいかもしれません。

ドロップダウンが入力規則なのかコントロールか分かりませんが、

  1. シートを複製
  2. 複製されたシート上で不要なモノを削除
  3. 添付できるように保存
  3. SendMail メソッドで送信
  4. 3.で保存されたものが不要なら削除

といった流れでできると思います。

Option Explicit
Sub Sample()

  Dim strDir   As String
  Dim strSubject As String
  Dim strTo    As String
  Dim strFilename As String
  

  strSubject = "送信テスト"
  strTo = "宛先メールアドレス"
    
  ' Activesheet を複製 --> 新規ブックに複製されます
  ActiveSheet.Copy

  ' 新規ブックの複製されたシートが現在アクティブになってます
  ' --> ThisWorkbook ではない
  ' ここで不要なものを削除するなど必要な処理を行う
  With ActiveSheet
    ' コントロールやシェープ等の削除
    .DrawingObjects.Delete
    ' 入力規則の削除
    .Cells.Validation.Delete
    ' A 列の削除
    .Columns(1).Delete
  End With

  ' 適切なファイル名を生成
  strFilename = ThisWorkbook.Path & "\" _
        & Format$(Now(), "yymmddhhmmss_") & ThisWorkbook.Name
  
  With ActiveWorkbook
    ' メール送信できるように保存
    .SaveAs strFilename
    ' メール送信
    .SendMail Recipients:=strTo, Subject:=strSubject
  End With

  ' 必要なら一時ファイルを削除(アラートは適当に処理)
  ActiveWorkbook.Close
  Kill (strFilename)

End Sub

Outlook を使う場合も、その他のメール送信コンポーネントを使用する
場合でも、基本的な流れは一緒です。
    • good
    • 0
この回答へのお礼

さそくありがとうございます。
SendMail メソッドというのですか、はじめて知りました。(メール送信はマクロの記録ではとれないので)

それで、ご教示のではエクセルのブックが添付ファイルになっていますが、実現したいのは、エクセルのワークシートから、メニューの、「ファイル」、「送信」、「あて先」で現在のシート記載事項をメール本文として送信するときと同じように、画面上部に送信先入力欄がでて、メール本文にシートの文言が転記されるようにしたいのです。
無理なのでしょうか?

お礼日時:2006/06/15 17:12

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