2016-08-30 19 views
0

私はOutlookで機能を追加しようとしています(VBAを使用すると、最も簡単だと思われます)、選択したファイルのパスを取る単純なファイルダイアログを追加し、電子メール本文をハイパーリンクとして使用します。Outlook VBAダイアログボックスで選択したファイルのハイパーリンクを追加します

このアイデアは、ネットワークファイルを電子メールに添付するのではなく、簡単に行うことができるように、同僚間で共有することです。

これまでのコードですが、ダイアログを開くことさえできず、COMDLG32.ocxを取得しようとしています。これまでは何もできないようです。

Sub Main2() 

Dim CDLG As Object 
Set CDLG = CreateObject("MSComDlg.CommonDialog") 
With CDLG 
.DialogTitle = "Get me a File!" 
.Filter = _ 
    "Documents|*.doc|Templates|*.dot|Text Files|*.txt" 
.ShowOpen 
MsgBox .FileName 
End With 
Set CDLG = Nothing 

End Sub 

どうもありがとうございました

それを必要とする人のためだけに。 OSのWindows 10、Office 2010のH & B(はい、私はそれが古くなって知っている:))

+0

私はあなたのコードをテストしました。Outlook 2010では、ファイルダイアログが期待どおりに開き、msgboxに選択したファイルのパスが表示されます。だから、あなたの問題に関するもう少しの情報を与えてください –

+0

Visual Studioがインストールされていない限り、ランタイムエラー '-2147221005(800401f3)'が表示されます...?それはあなたがダイアログをロードすることができる理由かもしれません... – joel2703

+0

確かに私はVSがインストールされています。私はオフィスから帰る途中です。あなたが有効な回答を受け取っていない場合は、あなたの問題を一目で見ていきます。 –

答えて

1

Outlook 2010 VBAFileDialogを開くための直接的な方法はないように思えます。

次のマクロ(related postに触発)はExcelの使用は、これを回避することができる:

Public Function promptFileName(title As String, filter As String) As String 
    ' requires project reference to "Microsoft Excel 14.0 Object Library" 
    Dim xlObj As Excel.Application 
    Dim fd As Office.FileDialog 
    Dim name As String 
    Dim vItem As Variant 
    Dim filterArray() As String 
    Dim i As Integer 

    Set xlObj = New Excel.Application 
    xlObj.Visible = False 
    Set fd = xlObj.Application.FileDialog(msoFileDialogOpen) 

    name = "" 
    With fd 
     .title = title 
     .ButtonName = "Ok" 
     .Filters.Clear 
     filterArray = Split(filter, "|") 

     For i = LBound(filterArray) To UBound(filterArray) - 1 Step 2 
      .Filters.Add filterArray(i), filterArray(i + 1), 1 + i \ 2 
     Next i 

     If .Show = -1 Then 
      For Each vItem In .SelectedItems 
       name = vItem 
       Exit For 
      Next 
     End If 
    End With 
    xlObj.Quit 
    Set xlObj = Nothing 
    promptFileName = name 
End Function 

Private Sub testPromptFile 
    Dim name as String 
    name = promptFileName("a test", "Text Files (*.txt)|*.txt|All Files (*.*)|*.*") 
    MsgBox name 
End Sub 

Outlook 2013以降は、この目的のためにOffice.FileDialogクラスを提供します。

+0

ありがとう - それは解決策のようです。しかし、私はそれを呼び出すと、 'Argument not optional'を返し、参照を追加し、それをサブとして呼び出そうとしましたが、Wordエディタを使用していると思われるハイパーリンクをまだ追加しようとしていません... : – joel2703

+0

私の答えでテストコールを見てください。これはあなたを開始する必要があります。 –

+0

は夢のように動作します - 今すぐハイパーリンクの部分で作業する...あなたの助けに感謝@Axel – joel2703

0

Outlook VBAでボタンを押すことができます。

Sub ExecuteMso_strId() 

Dim objItem As Object 
Dim strId As String 

' Text appears when hovering over icon 
' when adding buttons to a Quick Access toolbar or a ribbon 
strId = "HyperlinkInsert" 

On Error Resume Next 
Set objItem = ActiveInspector.currentItem 
On Error GoTo 0 

If Not objItem Is Nothing Then 
    ActiveInspector.CommandBars.ExecuteMso (strId) 
Else 
    ActiveExplorer.CommandBars.ExecuteMso (strId) 
End If 

End Sub 

これでExcelのようにパラメータにアクセスすることはできません。

関連する問題