2015-04-07 3 views
0

Интересно, может ли кто-нибудь помочь мне, пожалуйста.VBA Сохранить файл как

Я использую приведенный ниже код для динамического создания списка файлов из данной папки.

В столбце E для каждой строки списка есть ссылка «Нажмите здесь, чтобы открыть», которая позволяет пользователю открывать каждый файл.

Но я теперь хочу изменить это, вместо того чтобы открывать файл, ссылка откроет диалоговое окно «Сохранить», которое позволяет пользователю создать файл для выбранной пользователем папки, и я должен признать, что эта проблема заставила меня озадачен более недели.

Public Sub ListFilesInFolder(SourceFolder As Scripting.folder, IncludeSubfolders As Boolean) 

    Dim LastRow As Long 

    On Error Resume Next 
    For Each FileItem In SourceFolder.Files 
     ' display file properties 
     Cells(iRow, 3).Formula = iRow - 12 
     Cells(iRow, 4).Formula = FileItem.Name 
     Cells(iRow, 5).Select 
     Selection.Hyperlinks.Add Anchor:=Selection, Address:= _ 
     FileItem.Path, TextToDisplay:="Click Here to Open" 
     iRow = iRow + 1 ' next row number 

     With ActiveSheet 
      LastRow = .Cells(.Rows.Count, "C").End(xlUp).Row 
      LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
     End With 

     For Each Cell In Range("C13:E" & LastRow) ''change range accordingly 
      If Cell.Row Mod 2 = 1 Then ''highlights row 2,4,6 etc|= 0 highlights 1,3,5 
       Cell.Interior.Color = RGB(232, 232, 232) ''color to preference 
      Else 
       Cell.Interior.Color = RGB(141, 180, 226) 'color to preference or remove 
      End If 
     Next Cell 
    Next FileItem 

    If IncludeSubfolders Then 
     For Each SubFolder In SourceFolder.SubFolders 
      ListFilesInFolder SubFolder, True 
     Next SubFolder 
    End If 
    Set FileItem = Nothing 
    Set SourceFolder = Nothing 
    Set FSO = Nothing 
End Sub 

Я попытался с помощью команды «Application.Dialogs (xlDialogSaveAs) .Show» в каждой строке кода, но я не могу получить эту работу, потому что все это делает предложит пользователю сохранить файл как он создает список.

Я просто задавался вопросом, может ли кто-нибудь посмотреть на это, и сообщите мне, где я ошибся.

Большое спасибо и добрых пожелания

Chris

+0

Не ясно, что имеется в виду, сохраняя в этом контексте, но один подход к ловле щелчок, чтобы добавить событие Worksheet для SelectionChange, который наблюдает за нужную колонку с 'Если Intersect (Target, Range (» E: E ")) Теперь ничего не значит ...'. Если это выполнено, вы можете запросить сохранение и затем показать диалог сохранения, если да. Конечным результатом будет то, что нажатие в ячейке (т. Е. Изменение выбора) вызывает диалоговые окна. Подобные события SelectionChange могут вводить в заблуждение для обычных пользователей, хотя, поскольку они переопределяют нормальное поведение Excel. –

+0

Hi @Byron Wall, спасибо, что нашли время, чтобы вернуться ко мне с этим и простить меня за то, что я не был чист. Я нашел ссылку здесь [ссылка] (http://stackoverflow.com/questions/22662795/vba-or-formula-to-open-hyperlink-from-a-cell-and-save-rename-downloaded-file -f), который, мы надеемся, объяснит вещи немного подробнее, но я не уверен, как это сделать, чтобы файл, который был открыт и сохранен, не является книгой Excel. Кроме того, если это помогает, я могу опубликовать файл в Dropbox. Большое спасибо и добрые пожелания. Chris – IRHM

+0

Вы в конечном счете просто пытаетесь загрузить файлы из местоположения и дать им имя? Что-то похожее на http://stackoverflow.com/questions/17877389/how-do-i-download-a-file-using-vba-without-internet-explorer? –

ответ

0

Вот соответствующий код для копирования файла из заданного места в папку назначения, выбранный пользователем. Я завернул его в событие Worksheet для FollowHyperlink, так как кажется, что вы делаете это на основе щелчка.

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 

    Dim FSO 
    Dim sFile As String 
    Dim sDFolder As String 

    'path to file to copy, you will want to point this at a cell range 
    'this assume a single cell is selected 
    sFile = Target.Range.Value 

    'destination folder 
    Dim fldr As FileDialog 
    Set fldr = Application.FileDialog(msoFileDialogFolderPicker) 

    fldr.AllowMultiSelect = False 
    fldr.Show 

    'add the end slash for the copy operation 
    sDFolder = fldr.SelectedItems(1) & "\" 

    'FSO object to copy the file... True below overwrites if needed 
    Set FSO = CreateObject("Scripting.FileSystemObject") 
    FSO.CopyFile (sFile), sDFolder, True 

End Sub 
+0

Привет, большое спасибо за то, что вернулись ко мне с этим. Простите, просто я не ошибаюсь, не могли бы вы рассказать мне, как я буду интегрировать это с гиперссылкой? С уважением – IRHM

+0

Если вы хотите сохранить гиперссылки, вы можете использовать событие Worksheet 'FollowHyperlink' вместо' SelectionChanged'. См. Править выше. –

+0

Большое спасибо за это. Я попытался включить два сценария, вставляя 'Call ListFilesInFolder' после этой строки в ваш код:' Dim sDFolder As String', но, к сожалению, файл все еще открывается, а не диалог «Сохранить».Приношу свои извинения за то, что вы здесь немного плотные, но не могли бы вы рассказать мне, где я ошибся. С уважением – IRHM

Смежные вопросы