2016-08-05 15 views
2

ユーザーがボタンをクリックできるようにフォームを作成した後、そのドキュメントを参照して検索し、他の関連データとのリンクとして送信します。私は彼らが手動で行うことなく、複数のファイルでいっぱいのフォルダにリンクを接続させるための方法であるかどうか疑問に思っています。以下は私のコードですExcelでvbaフォームを使用してファイルをリンクする方法

Private Sub AddPicture_Click() 
Dim strFileToLink As String 

'link name 
lnkNm = InputBox("please enter link description") 
Application.ScreenUpdating = False 
strFileToLink = Application.GetOpenFilename _ 
(Title:="Please select an Evidence file to link to") 

'Checking if file is selected. 
If strFileToLink = "" Then 
    'Displaying a message if file not choosen in the above step. 
    MsgBox "No file selected.", vbExclamation, "Sorry" 
    'And exiting from the procedure. 
    Exit Sub 
Else 
    'print link to sheet as a hyperlink. 
    erow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
    With ActiveSheet 

     If ActiveSheet.Index >= 5 Then 
      .Hyperlinks.Add Anchor:=Cells(erow, 12), _ 
      Address:=strFileToLink, _ 
      ScreenTip:="Picture Link", _ 
      TextToDisplay:=lnkNm 

     Else 
      .Hyperlinks.Add Anchor:=Cells(erow, 13), _ 
      Address:=strFileToLink, _ 
      ScreenTip:="Picture Link", _ 
      TextToDisplay:=lnkNm 

     End If 
    End With 
    End If 
End Sub 

コメントを書くことができます。ありがとう

+0

あなたはuserformにリンクしていますか?申し訳ありませんが、私はあなたの必要条件を理解していません –

+0

ユーザーフォームにフォルダー/ファイルを取得させてから、リンクをExcelシートに置くようにします。 – cfaidl05

+0

それでは、上記のコードにどのような問題がありますか? –

答えて

4

の代わりに、Application.FileDialogを使用してください。これは、フォルダやファイル用にカスタマイズすることができます。ここで

https://msdn.microsoft.com/en-us/library/office/ff836226.aspx

あなたはフォルダ名やファイル名を取得するためにそれを使用することができる方法です。

Dim fdlg As FileDialog 

Dim fdlgType as Long, itm as Variant 
fdlgType = Application.InputBox("Enter '3' to choose a FILE, or '4' to choose a FOLDER") 
If fdlgType < 3 or fdlgType > 4 Then Exit Sub 
Set fdlg = Application.FileDialog(fdlgType) 
With fdlg 
    .Title = IIf(fdlgType = 3, "Please select an Evidence FILE to link to", _ 
           "Please select an Evidence FOLDER to link to") 
    .ButtonName = IIf(fdlgType = 3, "Select File", "Select Folder") 
    .Show 
    For Each itm in .SelectedItems 
     MsgBox itm 
    Next 
End With 

真は、ユーザーが複数選択させるかどうFileDialog.AllowMultiSelectプロパティがありますファイル(フォルダでは動作しません)。その後、.SelectedItemsをループすることができます。でも

Application.GetOpenFilename(Title:="Please select an evidence file to link to") 

か: - - :

Application.GetOpenFilename(Title:="Please select an evidence file to link to", MultiSelect:=True) 

代わりに使用しての

If .SelectedItems.Count = 0 Then 
    MsgBox "Nothing selected.", vbExclamation, "Sorry" 
    Exit Sub 
End If 
For Each itm in .SelectedItems 
    'print link to sheet as a hyperlink. 
    With ActiveSheet 
     erow = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
     If .Index >= 5 Then 
      .Hyperlinks.Add Anchor:=.Cells(erow, 12), _ 
      Address:=itm, _ 
      ScreenTip:="Picture Link", _ 
      TextToDisplay:=lnkNm 

     Else 
      .Hyperlinks.Add Anchor:=.Cells(erow, 13), _ 
      Address:=itm, _ 
      ScreenTip:="Picture Link", _ 
      TextToDisplay:=lnkNm 

     End If 
    End With 
Next 
+1

ちょっとした調整をしていただきありがとうございます。 – cfaidl05

+0

あなたは大歓迎です! –

1

:あなたのコードで

は、その後、For Each itmループは、ハイパーリンクを追加するコードが含まれます必要に応じてそれぞれを独自の広告申込情報として追加できる複数のファイルを選択できるようにします。

私が使用することをお勧めします: - :あなたがエラーを持っていないとの質問があったように、ファイルを選択するための

Application.FileDialog msoFileDialogFilePicker 

: - - フォルダの選択については

Application.FileDialog msoFileDialogFolderPicker 

を、そして

複数のファイルでいっぱいになっているフォルダにリンクできるようにする方法があるのだろうか。

上記の情報は、必要に応じてコードを変更するのに十分である必要があります。UserFormに2つのボタンがあることをお勧めします。 'リンクファイル'と 'リンクフォルダ'です。

コードを変更しているときにエラーが発生した場合は、投稿してください(回答が見つからない場合)。あなたの特定の質問に役立つと確信しています。

関連する問題