をクライアントアプリケーションがOutlook
であるため、暗黙的にExcelアプリケーションオブジェクトモデルが参照されていないため、明示的にrリファレンスすべてのExcelオブジェクト(たとえば、Worksheet
オブジェクトは)With object - End With
構文はに助けに来て両方このようなエラーを回避し、あなたのオブジェクトモデルの取り扱いをより把握(意識)を得ることができ、そのメンバー(たとえば、そのRows
プロパティ)
にアクセスするにはあなたはどんなオブジェクトを参照たら、あなたはインスタンスのように、離れてすべてのメンバー(プロパティ、メソッド、列挙型)シンプルなドット(.
)を持っている場合は、:
Public Sub CoupaQueries(MItem As Outlook.MailItem)
Dim objExcel As Excel.Application
Dim objOutlook As Outlook.Application '<--| not needed, since you' are in Outlook its object model is implicitly referenced
Dim PersonName As String, PersonAddress As String, PersonSubject As String, PersonDate As Date
With MItem '<--| reference passed MItem object
PersonName = .SenderName
PersonAddress = .SendUsingAccount
PersonSubject = .Subject
PersonDate = .ReceivedTime
End With
Set objExcel = New Excel.Application '<--| get a new instance of Excel
objExcel.Visible = True '<--| not necessary
With objExcel.Workbooks.Open("C:\Users\a222012\Desktop\CoupaQueries.xlsx").Sheets("Sheet1") '<--| get and reference an instance of "Sheet1" sheet of wanted workbook
With .Cells(.Rows.Count, 1).End(xlUp) '<--| reference referenced sheet column A first empty cell after last not empty one
.Offset(1, 0).Value = PersonName
.Offset(1, 1).Value = PersonAddress
.Offset(1, 2).Value = PersonSubject
.Offset(1, 3).Value = PersonDate
End With
.Parent.Save '<--| save parent object of currently referenced object: being this latter a worksheet, its parent object is the workbook it belongs to
End With
objExcel.Quit
Set objExcel = Nothing '<--| release application variable
End Sub
さらに
は、あなたがこれを実行する必要があります多くの郵便物の上のループ内のマクロあなたが完了したら、それと密接全体に使用し、ループを開始する前に1つのExcelの参照を得ることができます:
Sub main()
Dim iMail As Long, nMails As Long
Dim MItem As Outlook.MailItem
Dim objExcel As Excel.Application '<--| declare an Excel Application object in the main sub
Set objExcel = New Excel.Application '<--| get a new Excel application instance before starting the loop
For iMail = 1 To nMails
...
... code to get ith mail
...
CoupaQueries MItem, objExcel '<--| pass your routine the current mail item and the already gotten Excel application
Next
objExcel.Quit '<--| quit Excel once the loop has finished
Set objExcel = Nothing '<--| release application variable
End Sub
Public Sub CoupaQueries(MItem As Outlook.MailItem, objExcel As Excel.Application)
Dim PersonName As String, PersonAddress As String, PersonSubject As String, PersonDate As Date
PersonName = MItem.SenderName
PersonAddress = MItem.SendUsingAccount
PersonSubject = MItem.Subject
PersonDate = MItem.ReceivedTime
With objExcel.Workbooks.Open("C:\Users\a222012\Desktop\CoupaQueries.xlsx").Sheets("Sheet1") '<--| get and reference an instance of "Sheet1" sheet of wanted workbook
With .Cells(.Rows.Count, 1).End(xlUp) '<--| reference referenced sheet column A first empty cell after last not empty one
.Offset(1, 0).Value = "PersonName"
.Offset(1, 1).Value = PersonAddress
.Offset(1, 2).Value = PersonSubject
.Offset(1, 3).Value = PersonDate
End With
.Parent.Save '<--| save parent object of currently referenced object: being this latter a worksheet, its parent object is the workbook it belongs to
End With
End Sub
'wks.Rows.Count'だけではなく、' Rows.Count' – gizlmo
リファレンスブックを使用してみてください'wkb = objExcel.Workbooks.Open(" C:\ Users \ a222012 \ Desktop \ CoupaQueries.xlsx ")'を設定します。それを開いた後に分割されたアクティブワークブックではないかもしれないという小さなチャンスがあります。 @ gizlmo氏によると、Outlookは 'Rows.Count'が何であるか理解していない。 –
@gizlmoに感謝します。問題を修正したようです。 – KoderM16