2016-09-28 10 views
0

私は一緒に仕事をしようとしているいくつかのルーチンがあります。最初の2つは、ユーザーのマシン上のoutlook.exeファイルを見つけます.3番目のファイルが、まだ実行されていない場合は、そのファイルを使用してOutlookを開くようにします。私が持っている問題は、そのファイルのパスを3番目のルーチンに渡すことができることです。ここに私のコードです。どんな助けもありがとう。Excel VBAパスのファイルをOutlookに開くルーチンへのパス

Sub GetSubFolders() 

     Dim fso As New FileSystemObject 
     Dim f As Folder, sf As Folder 
     Dim myFile As File 

     On Error Resume Next 

     Set f = fso.GetFolder("C:\Program Files\") 

     For Each myFile In f 
     Next 

     For Each sf In f.SubFolders 
      Call Recursive(sf) 
     Next 

     Set f = fso.GetFolder("C:\Program Files (x86)\") 

     For Each myFile In f 
     Next 

     For Each sf In f.SubFolders 
      Call Recursive(sf) 
     Next 

    End Sub 
    Sub Recursive(sf As Folder) 
     Dim fso As New FileSystemObject 
     Dim f, nsf As Folder 
     Dim myFile As File 
     Dim s As String 
     Dim ofile As String 

     On Error Resume Next 

     Set f = fso.GetFolder(sf) 

     For Each myFile In f.Files 
      If Right(myFile, 11) = "outlook.exe" Then 
      Range("A1").Value = myFile.Path 
      Call outlook 
      End 
      End If 
     Next 
     For Each nsf In f.SubFolders 
      Recursive nsf 
     Next 


    End Sub 
    Sub outlook() 
    Const PATH_TO_OUTLOOK = """C:\Program Files\Microsoft Office 15\root\office15\outlook.exe""" 
    Const SHOW_MAXIMIZED = 3 
    Const MINIMIZE = 1 

    Dim oShell, oOutlook As Object 
    On Error Resume Next 
    Set oOutlook = GetObject(, "Outlook.Application") 
    Set oShell = CreateObject("WScript.Shell") 
    On Error GoTo 0 

    If oOutlook Is Nothing Then 

     ' Open Outlook 
     oShell.Run PATH_TO_OUTLOOK, SHOW_MAXIMIZED, False 

     On Error Resume Next 

     ' Grab a handle to the Outlook Application and minimize 
     Set oOutlook = WScript.CreateObject("Outlook.Application") 
     WScript.Sleep (10000) 
     oOutlook.ActiveExplorer.WindowState = SHOW_MAXIMIZED 

     ' Loop on error to account for slow startup in which case the 
     ' process and/or the main Outlook window is not available 
      Err.Clear 
      WScript.Sleep (10000) 
      Set oOutlook = Nothing 
      Set oOutlook = CreateObject("Outlook.Application") 
      oOutlook.ActiveExplorer.WindowState = MINIMIZE 


     Set oOutlook = Nothing 
     Set oShell = Nothing 
    End If 
    End Sub 
+0

をOutlookの実行可能ファイルを見つけることの目的は何ですか?マシンにインストールされている場合は、 'CreateObject(" Outlook.Application ")'を実行し、 '.Visible'に設定するだけです。 – Comintern

+0

たぶん私は間違っていると思っているかもしれませんが、異なるユーザーが異なるバージョンのオフィスをインストールしている可能性があり、32ビットと64ビットが異なる場合があるため、実行可能ファイルは異なる場所にあると考えています。投稿したOutlookのルーティンは私のマシンでは完璧に動作しますが、これを使用するすべてのユーザにとってはそうではないでしょう。 – DDietz

答えて

1

コミンテルンのコメントまったく同じように -

Sub Test() 

    Dim oOL As Object 
    Dim ns As Object 
    Dim fldr As Object 

    Set oOL = CreateOL 

    Set ns = oOL.GetNameSpace("MAPI") 
    Set fldr = ns.GetDefaultFolder(6) 'olFolderInbox 
    fldr.display 

End Sub 

Public Function CreateOL() As Object 

    Dim oTmpOL As Object 

    On Error GoTo ERROR_HANDLER 

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    'Creating an instance of Outlook is different from Excel. ' 
    'There can only be a single instance of Outlook running, ' 
    'so CreateObject will GetObject if it already exists.  ' 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    Set oTmpOL = CreateObject("Outlook.Application") 

    Set CreateOL = oTmpOL 

    On Error GoTo 0 
    Exit Function 

ERROR_HANDLER: 
    Select Case Err.Number 

     Case Else 
      MsgBox "Error " & Err.Number & vbCr & _ 
       " (" & Err.Description & ") in procedure CreateOL." 
      Err.Clear 
    End Select 

End Function 
+0

私はvbaの専門家ではないことを認めなければなりません。あなたが提供したコードを試してみましたが、Outlookアプリケーションは数秒間開いて閉じます。私が最初に投稿した見通しルーチンは、私がそれを望む方法で正確に動作しますが、32ビットまたは64ビットオフィスのユーザーには必要です。たぶん私はそれについて間違って行ったが、私が行くように私は学んでいる。 myFileのパスをPATH_TO_OUTLOOK定数などのアウトルックルーチンに渡すことができる方法はありますか? – DDietz

+0

コードを更新したので、コードが完了すると受信トレイが表示されるようになりました。あなたのOutlookルーチンに 'myFile'を渡すには、myFileを変数全体として(モジュールの先頭で宣言されている)変数として設定するか、プロシージャ名を' Sub Outlook(PATH_TO_OUTLOOK AS String) 'を呼び出すと' Outlook myFile'または 'CALL Outlook(myFile)'を使用します(呼び出しキーワードは必要ありません)。 –

+0

ご協力いただきありがとうございます。あなたの助けを借りて、私はついにそれを私が望むように働かせることができました。私はそれが可能な限り精巧ではないと確信していますが、それは動作しています! – DDietz

関連する問題