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

outlookからエクセルに、差出人アドレス、タイトル、本文を書き出すのに下記の内容でマクロを組んだのですが、書き出すエクセルにパスがかかっている場合どうしたらいいのでしょうか。
getobjectではなくopenのほうがいいのでしょうか。

' ここをトリプルクリックでマクロ全体を選択できます。
Public Sub ExportToExcel()
' EXCEL ファイルをフルパスで指定します
Const EXCEL_FILE = "c:\temp\調査管理.xlsx"
Dim objItem As MailItem
Dim objBook 'As Excel.Workbook
Dim objSheet 'As Excel.Worksheet
Dim r As Integer
' メールをどのように開いているか確認
If TypeName(Application.ActiveWindow) = "Inspector" Then
Set objItem = ActiveInspector.CurrentItem
Else
Set objItem = ActiveExplorer.Selection(1)
End If
' Excel ファイルを開く
Set objBook = GetObject(EXCEL_FILE)
objBook.Windows(1).Activate
Set objSheet = objBook.Sheets(1)
' データがない行まで移動
r = 2
While objSheet.Cells(r, 1) <> ""
r = r + 1
Wend
' メールの情報を Excel ファイルに追記
With objSheet
.Cells(r, 1) = objItem.SenderEmailAddress
.Cells(r, 2) = objItem.Subject
.Cells(r, 3) = objItem.Body
End With
' Excel ファイルを閉じる
objBook.Close True
End Sub

A 回答 (2件)

#1の補足。



注意:#1のマクロは、あくまでも、Excel側のブックにパスワードを設けていた場合ですから、今、ブックがパスワード付きかどうかの判定プログラムはつけていません。
    • good
    • 0

こんにちは。



>エクセルにパスがかかっている場合どうしたらいいのでしょうか。
パスではなくて、パスワードですね。

>getobjectではなくopenのほうがいいのでしょうか。
パスワード入力で慌てなければ、別に、どちらでもよいのでは。

つまり、Outlook側のマクロで、自動で開けてしまうのなら、同じことだと思います。管理上の問題だと思います。

ただし、私の個人的な意見ですと、Openメソッドで開ける方法は、事前に、パスワードを使用者に聞ける点で、土壇場でエラーを出すというようなことはなくなるはずです。

以下は、パスワード入力を三回失敗すると、マクロが起動しなくなります。仮にEsc を押しても同様です。
この部分は、もう少し複雑にさせることができますが、あまり複雑にすると、今度は、管理上の問題に発展します。
なお、プロシージャ名のPublic キーワードは外しました。

'//
Const PWS As String = "abc"
Private cnt As Integer
Sub ExportToExcel()
 ' EXCEL ファイルをフルパスで指定します
 Const EXCEL_FILE ="c:\temp\調査管理.xlsx"
 Dim IPsw As Variant
 If cnt > 3 Then Exit Sub
 IPsw = InputBox("パスワードを入れてください。", "InputPassWord")
 If IPsw <> PWS Then
   MsgBox "パスワードが違います。", vbCritical
   cnt = cnt + 1
   Exit Sub
 End If
 Dim xlApp As Object 'Excel.Application ''参照設定した場合
 Dim objItem As MailItem
 Dim objBook 'As Excel.Workbook
 Dim objSheet 'As Excel.Worksheet
 Dim r As Integer
 ' メールをどのように開いているか確認
 If TypeName(Application.ActiveWindow) = "Inspector" Then
  Set objItem = ActiveInspector.CurrentItem
  Else
  Set objItem = ActiveExplorer.Selection(1)
 End If
 ' Excel ファイルを開く
 Set xlApp = CreateObject("Excel.Application")
 Set objBook = xlApp.Workbooks.Open(EXCEL_FILE, , , , PWS, PWS)
 xlApp.Visible = True
 objBook.Activate
 objBook.Worksheets(1).Activate
 Set objSheet = objBook.Sheets(1)
 ' データがない行まで移動
 r = 2
 While objSheet.Cells(r, 1) <> ""
  r = r + 1
 Wend
 ' メールの情報を Excel ファイルに追記
 With objSheet
  .Cells(r, 1) = objItem.SenderEmailAddress
  .Cells(r, 2) = objItem.Subject
  .Cells(r, 3) = objItem.Body
 End With
 ' Excel ファイルを閉じる (VBAである限りは、xlApp だけでよいが、残り二つも将来必要になる時が来ます)
 objBook.Close True
 Set objSheet = Nothing
 Set objBook = Nothing
 Set xlApp = Nothing
End Sub
    • good
    • 0

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