2017-12-04 17 views
0

Outlookの(2007デスクトップバージョン)受信トレイからすべての電子メールを取得し、それらをDataGridViewに配置するプログラムを作成しようとしています。Visual BasicエラーでOutlookにアクセスする

コード:

Imports Outlook = Microsoft.Office.Interop.Outlook 

Public Class Form1 
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Dim dt As DataTable 
    Try 
     Dim app As Outlook.Application = New Outlook.Application() 
     Dim ns As Outlook.[NameSpace] = app.GetNamespace("MAPI") 
     Dim inbox As Outlook.MAPIFolder = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) 
     ns.SendAndReceive(True) 
     dt = New DataTable("Inbox") 
     dt.Columns.Add("Subject", GetType(String)) 
     dt.Columns.Add("Sender", GetType(String)) 
     dt.Columns.Add("Body", GetType(String)) 
     dt.Columns.Add("Date", GetType(String)) 
     DataGridView1.DataSource = dt 
     For Each item As Object In inbox.Items 
      If TypeOf item Is Outlook.MailItem Then 
       Dim item1 As Outlook.MailItem = CType(item, Outlook.MailItem) 
       dt.Rows.Add(New Object() {item1.Subject, item1.Sender, item1.HTMLBody, item1.SentOn.ToLongDateString() & "" + item1.SentOn.ToLongTimeString()}) 
      End If 
     Next 
     MessageBox.Show("done") 
    Catch ex As Exception 
     MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.[Error]) 
    End Try 
End Sub 
End Class 

私は私がフォローエラーを取得しています、プロジェクトをビルドしてみてください:

System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

UPDATE

私はにコンパイラのCPUを変更しましたx86とx64では、これはエラーを解決しません。

Target platform

+0

コードはありますか?私はこのようなことをしようとしているから、完全な井戸を見つけることはできませんでした...どこからこれを得ましたか? –

+0

エラーのためにプログラムを実行できないので、このコードが動作するかどうかはわかりません。 – NielsStenden

答えて

0

問題がエラーの原因となるかもしれませんが、両方のアプリケーション(VS2015とMS Office 2007のは)同じ権利の下で実行されていなかったということでした。両方のアプリケーションを同じ権限(管理者またはユーザー)で開くと、アプリケーションが機能します。助けてくれてありがとう!

0

アプリケーションのターゲットプラットフォームとは何ですか?それはx86ベースのアプリケーションですか?

COMクラス(32ビットCOM DLLにあります)が登録されていますが、アプリケーションが64ビットモードで実行されているため、正しく登録されません(32ビットと64ビットCOMサーバーは別途登録されます)。

また、あなたがHow to solve COM Exception Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))? page helpful.

+0

私はVS2017のコンパイルモードをx64とx86に変更し、両方を試しました。まだエラーが発生しています。 – NielsStenden

+0

MS Officeを修復してください。何かがあなたのWindowsのレジストリレコードで間違っているように見える、彼らは壊れています。 –

+0

私はMS Officeを修復しましたが、まだ削除されておらず、再インストールされていません。削除や再インストールは助けになると思いますか? – NielsStenden

0

この方法を試してみて、そのような件名、本文、Toaddress、ファイル名としてそれに引数を送信...イム確かにこの意志が働く..

ここ
Private Sub SendfromOutlook(sSubject As String, sBody As String, sTo As String, sFilename As String) 
    Dim oApp As Interop.Outlook._Application 
    oApp = New Interop.Outlook.Application 
    Dim oMsg As Interop.Outlook._MailItem 

    Dim strS As String() 
    strS = sTo.Split(",") 
    For i As Integer = 0 To strS.Length - 1 

     oMsg = oApp.CreateItem(Interop.Outlook.OlItemType.olMailItem) 
     oMsg.Subject = sSubject 
     oMsg.Body = sBody 
     oMsg.To = strS(i) 

     Dim str As String = sFilename 

     If sFilename <> "" Then 


      Dim sBodyLen As Integer = Int(sBody.Length) 
      Dim oAttachs As Interop.Outlook.Attachments = oMsg.Attachments 
      Dim oAttach As Interop.Outlook.Attachment 
      oAttach = oAttachs.Add(str, , sBodyLen) 

     End If 

     oMsg.Send() 

    Next 
    MessageBox.Show("EMail Sent Successfully!", "Information", MessageBoxButtons.OK) 
    ClearAll() 
End Sub 

を私は複数を送信するために「」を対処するために使用します私はちょうどそれを分割し、この関数をループするものとして使用しました(文字列()と strS = sTo.Split( "、"))

+0

ニースコード!しかし、私の質問に答えていない。私の主な問題は、私はエラーがあった、これは今修正されました。私は、OutlookとVS2015を異なる権限(ユーザーと管理者)で使用しました。私は両方の管理者がプログラムを実行するときに動作します。とにかくありがとう! – NielsStenden

関連する問題