ネットなどで調べたコードをつなぎ合わせ、なんとか下記のようなコードを作成しました。
Sub TEST2()
ActiveSheet.Protect UserInterfaceOnly:=True
Dim fname As String
fname = Range("C3").Text
ActiveSheet.Select
ActiveSheet.Copy
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Range("A1").Select
ActiveWorkbook.SaveAs _
Filename:="C:\Documents and Settings\***\My Documents\ファイル\" & fname & ".xls", FileFormat:=xlNormal
Dim MailSmtpServer As String
Dim MailFrom As String
Dim MailTo As String
Dim MailSubject As String
Dim MailBody As String
Dim MailAddFile As Variant
Dim strMSG As String
' 添付ファイルの選択
MailAddFile = "C:\Documents and Settings\***\My Documents\ファイル\" & fname & ".xls"
' 送信確認
If MsgBox("メールを送信します。" & vbCr & _
"SMTP,発信者,宛先等は正しいですか?", vbYesNo) <> vbYes Then Exit Sub
MailSmtpServer = "mail.***.co.jp" ' SMTPサーバ
MailFrom = "***@***.co.jp" ' 発信者
MailTo = "***@***.co.jp" ' 宛先
MailSubject = fname ' 件名
MailBody = "" ' 本文
' メール送信(CC,BCCはブランク)
strMSG = SendMailByCDO(MailSmtpServer, MailFrom, MailTo, "", "", _
MailSubject, MailBody, MailAddFile)
' 文字コードを任意に指定する場合は以下のようにします。
' strMSG = SendMailByCDO(MailSmtpServer, MailFrom, MailTo, "", "", _
MailSubject, MailBody, MailAddFile, cdoISO_2022_JP)
If strMSG <> "OK" Then MsgBox Mid(strMSG, 3)
End Sub
しかし、このようなエラーがでました。’宛先等は正しいですか?’のメッセージのあとです。
’2147024864プロセスはファイルにアクセスできません’。
ところで私がやりたいことは、(1)作成したエクセルの("C3").Textをファイル名にして、アクティブシートを(値のみ貼り付けして)保存し、(2)その作成されたファイルを添付してメールで送付する。ということです。
(2)のどこかで失敗しているものと思われますが、どこを直したらいいのかわかりません。
ここまで自分でできただけでも奇跡的なので、これ以上、どうしてよいか全くわからず。。
不足の情報があれば補足いたしますのでどうぞお願いいたします。
No.2ベストアンサー
- 回答日時:
番号だけで検索するとこういうのが出てくる。
http://support.microsoft.com/kb/294424/ja
文書番号: 294424 - 最終更新日: 2003年5月12日 - リビジョン: 2.1
PRB: エラーがファイルから ADO レコードセットを開く
また、
「’2147024864プロセスはファイルにアクセスできません’。」
単純に考えると
アクセスできないことがおかしい、か、
アクセスできる状況なのに(生成した)ファイル名がおかしい、か。
そのファイルは普通のメールソフトで送受信できているか。
ほかのファイルならうまく稼働する仕組みか。
「(2)のどこかで失敗しているものと思われます」
少なくともどこ、どの行が原因かは追求、
それをどう直すべきかはまた別の話。
継ぎはぎでなく、
別途稼働するマクロを確保してから、必要な部分を今回用につくり直す。
正しい部分とあやしい部分が明確でないならそれをはっきりさせる。
そんなところからか・・・。
ありがとうございます。エラーメッセージをよく確認したところ、単にアタッチしたかったエクセルが開いたままになっていたから添付できなかったことがわかりました。ありがとうございます。
No.1
- 回答日時:
了解しました~。
って、ナンにやね~ん。いいですね、いいですね、今って「なんとなく」で
ここまでのコーディングが出来てしまうほど
情報が集まってしまうんですね。うーんうらやましい。
なんて、個人的ハイテンションはおいといて
問題を順に解きほぐしていきましょう。
まずは質問文でも推測されている通り、メールに添付するファイルの指定
あるいはアクセスに失敗しているようです。
なのでカギを握るのは
MailAddFile = "C:\Documents and Settings\***\My Documents\ファイル\" & fname & ".xls"' 送信確認
の部分です。
ここで確認すべき点はこんなに
1.パス名も含めてファイル名の設定は正しく行われているか。
これは MsgBox でもで MailAddFile を表示させれば確認できます。
2.パス名、ファイル名は合っており、そこにそのファイルは存在しているか。
これは大文字小文字程度のミスが無いかどうかです。
テスト当初は全部小文字が無難。
3.パス名、ファイル名も合っており、ファイルも存在しているが、本当にアクセスできるものか。
これがこっそり大問題。実はこの質問文にあるプログラムには、
Windows が抱える小さな大問題が隠れていたりするのです。
その大問題とは!…えーと…なんでしたっけ…あっ、ちゃんと答えますから。。。
なんと、「ファイルのパス名中にスペースが有るとそこで途切れてしまう」
とかいうものです。
分かりにくいですが、つまりは SendMailByCDO では「C:\Documents 」までしか
認識していない可能性があるのです。
このテストは簡単。その対象ファイルを「C:\」に置く、つまり
MailAddFile = "C:\" & fname & ".xls"' 送信確認
にしてみればよいのです。
それでエラーが取れるなど変化があればこれが原因、けってー、だんてー。
これが原因ならば、後はパス名を適切に設定してあげればOK。
MailAddFile = chr(??) & "C:\Documents and Settings\***\My Documents\ファイル\" & fname & ".xls" & chr(??)' 送信確認
ダブルクォテーションを示すキャラ文字を前後に加えてあげればよいはずです。
文字の指定の仕方やコード番号は覚えていないです。すみません。
この3つ目の問題はいわゆる専門家となるプログラマさんでも知らない人が多そうな内容で
開発環境(開発会社)では動くのに本番稼動(現地)では動かないといった
クレーム的難問にもなっているようです。
さて、これで本当に先に進めるのでしょうか?
ではまた遭遇する機会がありましたら、次のステップに挑みませぅ。
この回答への補足
まことにありがとうございます。3は、ファイルを作成し保存する時点で、直接Cドライブにファイルを保存し、そしてそれを添付するように命令したらよい、ということでしょうか?
ところで、エラーメッセージの続きがあったことにつづきました。(別のプロセスが使用中です)と出てくるのです。ここにヒントがあるかもしれないと思い、お伝えさせていただきました。私がひとつ気になっているのは、このエクセルはもともと作成したところから、active sheetだけを(そのときセルのC3に入っている文字をファイル名にして)保存しています。
それは下記のコードにあるとおりです。
MailAddFile = "C:\Documents and Settings\***\My Documents\ファイル\" & fname & ".xls"
それを添付して送りたいのですが、私は下記のとおりに書きました。
MailAddFile = "C:\Documents and Settings\***\My Documents\ファイル\" & fname & ".xls"
もしかすると、別プロセスが使用中、というのは、このエクセルを保存したとき、このエクセルは開いたままになっていますので、それを添付しようとしているところにうまくいかない原因があるのかもしれない、と今思い始めています。
もしアドバイス等あればどうぞお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
binファイルを解凍したいの...
-
reaper音声ファイルについて
-
Latexで図番号だけを「図1.1」...
-
exeファイルの中身を見る方法は...
-
参照するファイルをワイルドカ...
-
エクセルvbaについて
-
VB6で特定のファイルを閉じたい
-
メモ帳の拡張子について
-
jarファイル
-
アメブロで音声ファイルを貼る方法
-
公文書のxmlファイルの開き方が...
-
HTMLからのBATファイル実行
-
ラッパーって何なんでしょう・...
-
ファイルが開かれているかどう...
-
監視ツールを入れさせられまし...
-
自分で作成した重要ファイルを...
-
○○○.zip.001というファイルが開...
-
VBAからファイルをセル入力から...
-
Tera Term にファイルを転送
-
CRCが一致する確率
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
binファイルを解凍したいの...
-
アクセス 壊れた? 「ファイ...
-
コマンドプロンプトで作成日時...
-
公文書のxmlファイルの開き方が...
-
#include <Windows.h>というヘ...
-
.NETアプリを作ったときの .man...
-
exeファイルの中身を見る方法は...
-
jarファイル
-
自分で作成した重要ファイルを...
-
Seasar2のdiconファイルの読み方
-
VBAでのicsファイル変換
-
バッチ処理で追記コピーしたい
-
監視ツールを入れさせられまし...
-
参照するファイルをワイルドカ...
-
「ブルーファイル」と「グリー...
-
HTMLからのBATファイル実行
-
Latexで図番号だけを「図1.1」...
-
C言語---ファイルに出力したデ...
-
Windowsのエクスプローラーでフ...
-
warファイルをEclipseでプロジ...
おすすめ情報